Очистить кеш другого приложения
Я читал здесь о том, как очистить другие приложения 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/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);