安卓如何读取浏览器历史记录

34

我想要在安卓手机中读取浏览器历史记录。

我已经阅读了一些文档,发现可以通过android.provider.Browser类来读取浏览器历史记录。它具有:

final static Cursor
getAllVisitedUrls(ContentResolver cr)

我能得到帮助来处理 Cursor 吗,或者得到任何获取浏览器历史记录的示例代码吗?

5个回答

29

我并没有回答你的问题,但我可以告诉你我的做法。

我首先克隆了浏览器仓库,试图重现他们如何获取历史记录。

权限拒绝:读取com.android.browser.BrowserProvider

于是我添加了:

<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />

但它仍然给我相同的错误。 我在Google上搜索并找到了这个使用Android Cursors访问数据

希望能有所帮助。


1
权限应该是:<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" /> 如果这么做就可以了。 - Firebrandt
@Firebrandt:我刚刚修好了。谢谢。 - Macarse
这个方法需要root访问权限,还是只需要单个权限? - ethanpil
@ethanpil.. 伙计,不需要 root 访问权限。 - Noman
这个答案还没有完成,经过我多次尝试,我发现问题的另一部分是AVD。因此,安装带有API 18的AVD(我正在运行API 23),然后我就能够运行它了。我不确定为什么这个过程如此挑剔。 - Jaider
11
这将不再在Marshmallow中起作用:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-bookmark-browser - user1406716

18

managedQuery已被弃用,请使用getContentResolver代替,使用以下代码:

String[] proj = new String[] { Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL };
String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history, 1 = bookmark
Cursor mCur = getContentResolver().query(Browser.BOOKMARKS_URI, proj, sel, null, null);
mCur.moveToFirst();
@SuppressWarnings("unused")
String title = "";
@SuppressWarnings("unused")
String url = "";
if (mCur.moveToFirst() && mCur.getCount() > 0) {
    boolean cont = true;
    while (mCur.isAfterLast() == false && cont) {
        title = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.TITLE));
        url = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.URL));
        // Do something with title and url
        mCur.moveToNext();
    }
}

同时使用以下方式添加权限:

<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />

这个答案可行!我还根据这个答案做了一个示例 https://github.com/shanwu/shanwu_coding_base/tree/bookmark_record_example - shanwu
3
大多数与书签相关的内容在API Level 23(Android 6.0+)中被移除了。 - Aashish Kumar

9

对于Lollipop或更早版本

我可以使用以下代码获取历史记录:

Cursor mCur = activity.managedQuery(Browser.BOOKMARKS_URI,
                    Browser.HISTORY_PROJECTION, null, null, null);
            if (mCur.moveToFirst()) {
                while (mCur.isAfterLast() == false) {
                    Log.v("titleIdx", mCur
                            .getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
                    Log.v("urlIdx", mCur
                            .getString(Browser.HISTORY_PROJECTION_URL_INDEX));
                    mCur.moveToNext();
                }
            }

2
Log.v("urlIdx", mCur.getString(Browser.HISTORY_PROJECTION_DATE_INDEX")); 试一下这个。更多信息请访问http://developer.android.com/reference/android/provider/Browser.html。 - Mitul Nakum
2
这个在Marshmallow中将不再起作用:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-bookmark-browser - user1406716

4

这篇文章有点老了,但是这里提供了另一种在 Android 中获取与 BookmarkSearch 内容提供程序相关数据的简单解决方案:

使用这个库:https://github.com/EverythingMe/easy-content-providers

获取所有书签:

BrowserProvider browserProvider = new BrowserProvider(context);
List<Bookmark> bookmarks = browserProvider.getBookmarks().getList();

每个书签都有所有字段,因此您可以获取所需的任何信息:标题、网址、访问量等

获取所有搜索历史记录:

List<Search> searches = browserProvider.getSearches().getList();

它可以与列表或光标一起使用,并且有一个示例应用程序可以查看其外观和工作方式。

实际上,支持所有Android内容提供程序,如:联系人、短信、通话等。完整的文档包括所有选项:https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers

希望这有所帮助 :)


3
  public ArrayList<HistoryEntry> getBrowserHistory() {

    String title = "";
    String url = "";

    ArrayList<HistoryEntry> list = new ArrayList<HistoryEntry>();

    String[] proj = new String[] { Browser.BookmarkColumns.TITLE,
            Browser.BookmarkColumns.URL };
    String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history,
                                                            // 1 = bookmark
    Cursor mCur = getContentResolver().query(Browser.BOOKMARKS_URI, proj,
            sel, null, null);
    mCur.moveToFirst();

    if (mCur.moveToFirst() && mCur.getCount() > 0) {
        boolean cont = true;
        while (mCur.isAfterLast() == false && cont) {
            HistoryEntry entry = new HistoryEntry();

            title = mCur.getString(mCur
                    .getColumnIndex(Browser.BookmarkColumns.TITLE));
            url = mCur.getString(mCur
                    .getColumnIndex(Browser.BookmarkColumns.URL));
            // Do something with title and url
            entry.setTitle(title);
                            entry.setUrl(url);
                            list.add(entry );
            Log.d("TAG", "title   " + title);
            mCur.moveToNext();
        }
    }

    mCur.close();

    return list;
}

1
大多数与书签相关的内容在API Level 23(Android 6.0+)中被删除。 - Aashish Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接