如何在 Android Marshmallow (API>=23) 中获取 Chrome 历史记录和书签?

Posted

技术标签:

【中文标题】如何在 Android Marshmallow (API>=23) 中获取 Chrome 历史记录和书签?【英文标题】:How to get Chrome History & Bookmarks in Android Marshmallow (API>=23)? 【发布时间】:2016-02-02 20:36:09 【问题描述】:

直到 API 级别 22(即直到 Lollipop),有一种方法可以使用权限 com.android.browser.permission.READ_HISTORY_BOOKMARKS 从 Chrome 应用程序读取历史记录和书签(如 this thread 所示)。

现在,在 Android API=23 Marshmallow 中,由于整个浏览器书签系统已经在 Marshmallow (changes here) 中被删除,上述方法不再有效。

Here is the thread 这说明了为什么这不再可能了。

到目前为止,在我的研究中,我还没有发现好消息。谷歌肯定已经杀死了系统书签功能(here & here),问题是 Chrome 浏览器是否会以任何方式暴露它?

在 Android Marshmallow 中是否有替代/方式从 Chrome 中读取书签和历史记录(即使特定于 Chrome 也会回答这个问题)?

【问题讨论】:

请不要混淆google-chrome和google-chrome-app 如果您随时找到答案,请告诉我。我有同样的问题:) permission READ_HISTORY_BOOKMARKS is not working on API 23的可能重复 【参考方案1】:

与引用的文档相反,com.android.browser.permission.READ_HISTORY_BOOKMARKS 仍然由框架定义,并且仍然可以由应用程序获取。不幸的是,在 Marshmallow 及更高版本上,Chrome 会检查不同的权限,这是常规应用程序不允许获得的权限。出于兼容性原因,当权限检查不可避免地失败时,Chrome 会返回零行而不是抛出 SecurityException

你可以在这里查看源代码:

query() 调用hasReadAccess(),后者调用hasPermission("com.android.browser.permission.READ_HISTORY_BOOKMARKS"),它在 API >= M 上忽略权限参数,而是检查com.android.chrome.permission.READ_WRITE_BOOKMARK_FOLDERS。此权限仅限于系统应用和使用 Google 密钥签名的应用。

【讨论】:

那么,这是什么意思?其他应用程序能否读取 Chrome for Android 的历史记录? @Melab 有人找到解决方案了吗?【参考方案2】:

您可以通过键入查看您的历史记录

Chrome://history

作为您的网址。

【讨论】:

我的意思是 - 从 Android/Java API 以编程方式编写,即为它编写一个应用程序。 @user1406716 你有没有找到解决这个问题的方法?如果是这样发布答案! :) 不,我没有。 @j__m 的回答似乎很有希望,但需要尝试一下。

以上是关于如何在 Android Marshmallow (API>=23) 中获取 Chrome 历史记录和书签?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Marshmallow 平台上高效开发系统应用?

如何在 Android Marshmallow 上的 Google 地图上显示当前位置?

如何以编程方式打开 Android 6.0 (Marshmallow) 上特定应用的权限屏幕?

如何从 Android 版本 Marshmallow 开始请求从 Android 拨打电话的权限?

如何从 Android Marshmallow 中的服务请求权限

Android Marshmallow - 如何知道“不再询问”之前检查过