Очистить кеш приложения программно? - PullRequest
4 голосов
/ 05 января 2011

Я хочу написать утилиту, в которой пользователь может выбрать набор установленных приложений и очистить их кэш данных, например, как вы можете сделать это вручную, используя встроенный экран «Настройки» -> «Настройки приложений» с кнопкой «Очистить кэш». .

Как получить доступ к количеству кэшированных данных в каждом приложении и программно очистить эти кэши?

Ответы [ 3 ]

6 голосов
/ 11 апреля 2012

Ответ, данный здесь, ложный, есть рыночные приложения, которые программно очищают все функции кэша приложений. Кроме того, в документации есть следующее:

public static final String CLEAR_APP_CACHE

Начиная с: Уровень API 1 в Android Позволяет приложению очищать кеши всех установленных приложений на устройстве. Постоянное значение:

 android.permission.CLEAR_APP_CACHE

Обратите внимание на «часть всех установленных приложений» и тот факт, что вам не нужны какие-либо права доступа root или специальные разрешения, кроме разрешения обычного пользователя.

Я публикую здесь, потому что у меня есть требование к конечному результату очищать все кэши приложений каждые 24 часа на демонстрационном телефоне в магазине, и я пытаюсь выяснить, как правильно его использовать. Я знаю, что часть решения получает это разрешение, я также знаю, как найти все установленные приложения на устройстве, и я работаю над тем, чтобы реально удалить кэш. Моя проблема в том, что другие кеши приложений считываются без файлов (несмотря на наличие содержимого), я подозреваю, что у меня нет прав на чтение, чтобы сделать вызов списка файлов.

2 голосов
/ 05 января 2011

Обычные приложения SDK не имеют прав доступа, не говоря уже о том, чтобы изменять кеши других приложений, кроме тех случаев, когда они имеют право взламывать ваши файлы.

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

0 голосов
/ 28 июня 2016

У вас должно быть это разрешение в вашем манифесте:

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

После этого вы можете использовать PackageManager для очистки кэша всей программы:

PackageManager  pm = getPackageManager();
// Get all methods on the PackageManager
Method[] methods = pm.getClass().getDeclaredMethods();
for (Method m : methods) {
    if (m.getName().equals("freeStorage")) {
        // Found the method I want to use
        try {
            long desiredFreeStorage = 8 * 1024 * 1024 * 1024; // Request for 8GB of free space
            m.invoke(pm, desiredFreeStorage , null);
        } catch (Exception e) {
            // Method invocation failed. Could be a permission problem
        }
        break;
    }
}

Это требует, чтобы Android очистил кэш достаточнофайлы, так что есть 8 ГБ бесплатно.Если вы установите это число достаточно высоким, вы должны достичь того, чего хотите (этот Android удалит все файлы в кеше).Когда вы вызываете freeStorage () , он проверяет, доступен ли объем памяти (в данном случае 8 ГБ) для файлов кэша.Если нет, он начинает удалять файлы из каталогов кэша приложения, сначала удаляя самые старые файлы.Он продолжает удалять файлы до тех пор, пока не исчезнут файлы для удаления или не освободит запрошенный объем памяти (в данном случае 8 ГБ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...