Очистить кеш другого приложения

Я читал здесь о том, как очистить другие приложения cahce-memory, и я также пытался кодировать свое собственное приложение. Результат, который я получил, заключается в том, что с текущим уровнем безопасности Android это невозможно.

Но есть ли в настоящее время на Маркете много приложений для очистки кеша (Google Play)?

Когда я начал свое заявление, которое я дал android.permission.DELETE_CACHE_FILES разрешение, LogCat напечатан

Not granting permission android.permission.DELETE_CACHE_FILES to package <MY_PACKAGE_NAME> (protectionLevel=3 flags=0x8be46)

После некоторых исследований я обнаружил, что сторонним приложениям не будут предоставляться разрешения с protectionLevel=3 Итак, я сталкиваюсь с java.lang.SecurityException всякий раз, когда я пытаюсь удалить другой кэш приложения (логически)

У меня такой вопрос: "Как эти приложения в Google Play разрешены и могут удалить кеш других приложений?"

Извините за мой плохой английский, не носитель языка

3 ответа

Решение

Это можно сделать только в том случае, если устройство имеет root-права и ваше приложение обладает правами суперпользователя.

Позвольте мне рассказать вам, как эти приложения достигают этого.

Немного android classes have methods которые private(@hidden) пользователю по умолчанию. Мы не можем получить к ним доступ напрямую. но у вас есть лучший подход к использованию Reflection,

Добавьте разрешение.

<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>

И следуйте этим ответам

/questions/37841595/kak-udalit-kesh-drugih-prilozhenij-iz-nashego-prilozheniya-dlya-android/37841598#37841598

/questions/26622037/android-ochistit-kesh-vseh-prilozhenij/26622052#26622052

И не забудьте создать package название android.content.pm и добавьте IPackageDataObserver.aidl в пакет. Тогда тебе пора.

Для Android 11 и выше вы можете использовать ACTION_CLEAR_APP_CACHE. Это действие не очищает кеш приложения автоматически, но показывает системный диалог и позволяет пользователю решить.

Также требуется разрешение MANAGE_EXTERNAL_STORAGE, проверьте документацию.

Использование:

Манифест Android:

      <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    android:minSdkVersion="30"
    tools:ignore="ScopedStorage" />

Очистить весь кеш:

      //Get the cache dialog
int requestCode = 999;
Intent intent = new Intent(StorageManager.ACTION_CLEAR_APP_CACHE);
activity.startActivityForResult(intent, requestCode);
Другие вопросы по тегам