在Android浏览器中获取当前URL

Mic*_*rov 7 java url android browser-history android-browser

我正在寻找一种方法来获取用户在Android浏览器应用程序上访问的当前URL.我发现我可以Browser.BOOKMARKS_URI使用以下技术从数据库中获取最后访问过的URL :

Cursor cursor = context.getContentResolver().query(Browser.BOOKMARKS_URI,
        Browser.HISTORY_PROJECTION, null, null,
        Browser.BookmarkColumns.DATE + " DESC");
cursor.moveToNext();
String url = cursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX);
cursor.close();
Run Code Online (Sandbox Code Playgroud)

这样做的问题是,Browser.BOOKMARKS_URI当用户按下以便导航到浏览器中的上一页时,db不会更新,并且查询返回不正确的结果.

请参阅以下示例:

  1. 用户导航到www.google.com - > 查询返回"www.google.com"
  2. 用户导航到www.imdb.com - > 查询返回"www.imdb.com"
  3. 用户按下返回www.google.com - > 查询返回"www.imdb.com"(!!)

有没有人知道如何返回用户正在查看的正确网址?

Bal*_*yam 0

我认为您没有经历过以下方法。尝试一次!您可以像访问其他 ContentProvider 一样访问浏览历史记录。除了浏览历史记录之外,您还可以获得书签列表。

Cursor webLinksCursor = getContentResolver().query(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, null, null, Browser.BookmarkColumns.DATE + " DESC");
int row_count = webLinksCursor.getCount();

int title_column_index = webLinksCursor.getColumnIndexOrThrow(Browser.BookmarkColumns.TITLE);
int url_column_index = webLinksCursor.getColumnIndexOrThrow(Browser.BookmarkColumns.URL);

if ((title_column_index > -1) && (url_column_index > -1) && (row_count > 0))
{
    webLinksCursor.moveToFirst();
    while (webLinksCursor.isAfterLast() == false)
    {
        if (webLinksCursor.getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX) != 1)
        {
            if (!webLinksCursor.isNull(url_column_index))
            {
                Log.i("History" , "Last page browsed " + webLinksCursor.getString(url_column_index));
                break;
            }
        }
        webLinksCursor.moveToNext();
    }            
}
webLinksCursor.close();
Run Code Online (Sandbox Code Playgroud)

你还需要许可

com.android.browser.permission.READ_HISTORY_BOOKMARKS
Run Code Online (Sandbox Code Playgroud)