Android的棉花糖如何获取Chrome历史logging和书签(API> = 23)?

直到API级别22(即直到棒棒糖),有一种方法可以使用权限com.android.browser.permission.READ_HISTORY_BOOKMARKS从Chrome应用程序中读取历史logging和书签( 如此线程中所示)。

现在,在Android API = 23棉花糖,由于整个浏览器书签系统已被删除在棉花糖( 这里更改 ),上述方法不再工作。

这里是显示为什么这是不可能的线程 。

在我的研究中,我还没有find好消息。 谷歌已经明确杀死了系统书签function( 这里 & 这里 ),问题是如果Chrome浏览器将以任何方式暴露它?

是否有替代/方式来阅读从Chrome浏览器的书签和历史logging(即使Chrome的具体回答这个问题)在Android棉花糖前进?

Solutions Collecting From Web of "Android的棉花糖如何获取Chrome历史logging和书签(API> = 23)?"

与引用的文档相反, com.android.browser.permission.READ_HISTORY_BOOKMARKS仍然由框架定义,仍然可以通过应用程序获得。 不幸的是,在棉花糖和更高版本中,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浏览历史logging

  if (mContext != null && mContext.getContentResolver() != null) { long lastDateBookmarkGet = getPrefToSharedPreferences("lastDateBookmarkGet",mContext) != null ? (Long.valueOf(getPrefToSharedPreferences("lastDateBookmarkGet",mContext))) : 0; Cursor cursor = mContext.getContentResolver().query(Uri.parse("content://com.android.chrome.browser/bookmarks"), null, "date >" + lastDateBookmarkGet, new String[] { "date" } , "date DESC"); if (cursor != null && cursor.getCount() > 0) { if (cursor.moveToFirst()) { do { // Collect data from cursor } while (cursor.moveToNext()); } savePrefToSharedPreferences("lastDateBookmarkGet", String.valueOf(System.currentTimeMillis()), mContext); } else if (cursor != null) { Log.d("getBookMarksHist", "No new registers"); } else { Log.d("getBookMarksHist", "Cursor is NULL"); } } public static void savePrefToSharedPreferences(String pref, String value, Context mContext) { // Access Shared Preferences SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = preferences.edit(); // Save to SharedPreferences editor.putString(pref, value); editor.apply(); } public static String getPrefToSharedPreferences(String pref, Context mContext) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext); return preferences.getString(pref, null); } 

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

 Chrome://history 

作为你的url。