Android阅读浏览器历史记录

时间:2010-04-05 05:40:02

标签: android browser browser-history

我想在Android手机中阅读浏览器历史记录。

我已经完成了一些文档阅读,然后我才知道我们可以通过android.provider.Browser类读取浏览器历史记录。它有:

final static Cursor
getAllVisitedUrls(ContentResolver cr)

...返回Cursor的方法。

我可以获得帮助来处理Cursor或任何示例代码以获取浏览器历史记录吗?

5 个答案:

答案 0 :(得分:29)

不是答案,但我可以告诉你我做了什么。

我首先克隆browser repo并尝试重现他们如何获得历史记录。 我开始得到:

  

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

所以我补充道:

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

但它仍然给我同样的错误。我谷歌它,我发现了这个Accessing Data With Android Cursors

希望它有所帮助。

答案 1 :(得分: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" />

答案 2 :(得分: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();
                }
            }

答案 3 :(得分:4)

这篇文章有点陈旧,但这是另一种简单的解决方案,用于在Android中获取与BookmarkSearch内容提供商相关的数据:

使用此lib: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

希望它有所帮助:)

答案 4 :(得分: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;
}