【问题标题】:Android read browser historyAndroid 读取浏览器历史记录
【发布时间】:2011-02-04 08:18:56
【问题描述】:

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

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

final static Cursor
getAllVisitedUrls(ContentResolver cr)

...返回Cursor的方法。

我能否获得处理光标的帮助,或获取浏览器历史记录的任何示例代码?

【问题讨论】:

    标签: android browser browser-history


    【解决方案1】:

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

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

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

    所以我补充说:

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

    但它仍然给我同样的错误。我用谷歌搜索,我找到了这个Accessing Data With Android Cursors

    希望对你有帮助。

    【讨论】:

    • 权限应该是:&lt;uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" /&gt; 这样就可以了。
    • @Firebrandt:我刚刚修好了。谢谢。
    • 这种方法需要root访问权限,还是只需要单一权限?
    • @ethanpil.. 好友无需 root 访问权限
    • 这不再适用于 Marshmallow:developer.android.com/about/versions/marshmallow/…
    【解决方案2】:

    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" />
    

    【讨论】:

    【解决方案3】:

    对于 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();
                    }
                }
    

    【讨论】:

    【解决方案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

    希望它有所帮助:)

    【讨论】:

      【解决方案5】:
        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;
      }
      
      猜你喜欢
      • 2017-05-17
      • 2011-11-14
      • 2013-05-21
      • 2013-11-18
      • 1970-01-01
      • 2017-11-01
      • 2012-05-10
      • 1970-01-01
      • 2015-06-14
      相关资源
      最近更新 更多