在Android浏览器中获取当前URL

9
我在寻找一种获取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();

这样做的问题在于,当用户按返回按钮以导航到浏览器中的上一页时,Browser.BOOKMARKS_URI数据库不会得到更新,因此查询会返回不正确的结果。
请看下面的例子:
1. 用户导航到 www.google.com -> 查询返回 "www.google.com" 2. 用户导航到 www.imdb.com -> 查询返回 "www.imdb.com" 3. 用户按返回按钮返回到 www.google.com -> 查询返回 "www.imdb.com" (!!) 有没有人知道如何返回用户正在查看的正确网址?

内容解析器正在按预期工作:按返回键不会重新加载www.google.com页面,而是从缓存中读取。当用户切换选项卡时也是同样的情况:历史记录显示最新加载的URL,而不一定是当前显示的URL。您可以在嵌入到应用程序中的WebView中跟踪当前URL。 - Alex Cohn
我没有在我的应用程序中使用嵌入式WebView。 我正在尝试查找Android浏览器应用程序的当前网页。 - Michael Gregorov
我认为这超出了正常应用程序的功能范围,通常情况下,除非通过某种方式提供数据,否则您无法访问另一个应用程序的数据。获取浏览器历史记录似乎是您唯一能做的事情。 - Nanoc
1个回答

0

我认为你还没有尝试过以下方法。试一试吧! 您可以像访问其他ContentProviders一样访问浏览历史记录。除了浏览历史记录,您还可以获取书签列表。

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();

而且你还需要权限

com.android.browser.permission.READ_HISTORY_BOOKMARKS

你基本上在做我所做的事情,也就是浏览Browser.BOOKMARKS_URI数据库。唯一的区别是我只获取最近的URL,而你获取所有的URL。正如我在问题中所写的那样,当用户按下返回键后,Browser.BOOKMARKS_URI数据库不会保存当前的URL。 - Michael Gregorov
我有一个想法,这个操作用JQuery mobile怎么样? - Bala Subramanyam
只有当我编写自己的浏览器应用程序时,JQuery Mobile 才能帮助我,但我正在尝试从本机/Chrome Android 浏览器获取当前 URL。 - Michael Gregorov
@MichaelGregorov:嘿,你是怎么解决你的问题的?其实我也在寻找类似问题的答案。谢谢。 - Sam
1
@Sam: 很遗憾,我没能解决这个问题。不过我成功地通过Chrome浏览器内容提供程序获得了更好的结果。当用户点击返回按钮后,当前URL会被记录在数据库中,但是当用户在打开的标签之间切换时却没有记录。如果你能找到解决办法,我会很高兴听到你的建议。 - Michael Gregorov
@MichaelGregorov 我知道这是一个非常老的帖子,想知道你是否能够破解后台和选项卡切换。 - jan_kiran

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