我想要在安卓手机中读取浏览器历史记录。
我已经阅读了一些文档,发现可以通过android.provider.Browser类来读取浏览器历史记录。它具有:
final static Cursor
getAllVisitedUrls(ContentResolver cr)
我能得到帮助来处理 Cursor 吗,或者得到任何获取浏览器历史记录的示例代码吗?
我想要在安卓手机中读取浏览器历史记录。
我已经阅读了一些文档,发现可以通过android.provider.Browser类来读取浏览器历史记录。它具有:
final static Cursor
getAllVisitedUrls(ContentResolver cr)
我能得到帮助来处理 Cursor 吗,或者得到任何获取浏览器历史记录的示例代码吗?
我并没有回答你的问题,但我可以告诉你我的做法。
我首先克隆了浏览器仓库,试图重现他们如何获取历史记录。
权限拒绝:读取com.android.browser.BrowserProvider
于是我添加了:
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
但它仍然给我相同的错误。 我在Google上搜索并找到了这个使用Android Cursors访问数据。
希望能有所帮助。
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" />
对于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();
}
}
这篇文章有点老了,但是这里提供了另一种在 Android 中获取与 Bookmark
和 Search
内容提供程序相关数据的简单解决方案:
使用这个库: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
希望这有所帮助 :)
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;
}
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
如果这么做就可以了。 - Firebrandt