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

Android: очистить кеш всех приложений?

В приложении Android, которое я делаю, я хочу, чтобы программно очистить кеш всех приложений на устройстве. Об этом много раз спрашивали: Программная очистка кэша приложений? Отражение методов очистки кэша приложений Android Очистить другой кеш приложений и все говорят, что это невозможно без root.

Однако это явно не так. Если вы посмотрите на приложение App Cache Cleaner, History Eraser, 1Tap Cleaner, Easy History Cleaner и множество других подобных приложений в Google Play (все из которых не требуют root), вы поймете, что они могут это сделать. Поэтому это можно сделать, но я просто не могу найти публичные примеры, как это сделать.

Кто-нибудь знает, что делают все эти приложения?

Спасибо

4b9b3361

Ответ 1

Вот способ сделать это, который не требует IPackageDataObserver.aidl:

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

Вам нужно будет иметь это в своем манифесте:

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

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

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

Ответ 2

Вы можете очистить данные всех приложений с помощью метода this (freeStorageAndNotify). Вы должны получить доступ к этому методу с помощью java-отражения. Для этого вам понадобится IPackageDataObserver.aidl. вам также необходимо иметь разрешение в вашем файле манифеста для удаления кеша