Подтвердить что ты не робот

Как получить историю Chrome и закладки в Android Marshmallow (API >= 23)?

До уровня API 22 (т.е. до Lollipop) был способ прочитать историю и закладки из приложения Chrome (как показано в этой теме), используя разрешение com.android.browser.permission.READ_HISTORY_BOOKMARKS.

Теперь, в Android API = 23 Marshmallow, поскольку вся система закладок браузера была удалена в Marshmallow (здесь), выше метод больше не работает.

Вот поток, который показывает, почему это невозможно.

В моих исследованиях до сих пор я не нашел хороших новостей. Google определенно убил функцию системных закладок (здесь и здесь), вопрос заключается в том, что Chrome Browser будет подвергать его каким-либо образом?

Есть ли замена/способ чтения Закладок и Истории из Chrome (даже конкретный Chrome ответил бы на этот вопрос) в Android Marshmallow?

4b9b3361

Ответ 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.

Ответ 2

Для устройств ниже Marshmallow вы можете получить хромированную историю просмотров пошагово, как показано ниже.

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

Ответ 3

Вы можете просмотреть свою историю, набрав

Chrome://history

Как ваш URL.