Как программно очистить кеш приложения в Android 4.2.2 и выше

В Android 4.0 я использую это решение, чтобы очистить кеш приложения, и оно отлично работает:

public void clearApplicationData()
{
    File cache = getCacheDir();
    File appDir = new File(cache.getParent());
    if (appDir.exists()) {
        String[] children = appDir.list();
        for (String s : children) {
            if (!s.equals("lib")) {
                deleteDir(new File(appDir, s));
            }
        }
    }
}

public static boolean deleteDir(File dir)
{
    if (dir != null && dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }
    return dir.delete();
}

К сожалению, это решение не работает в версии 4.2.2 для Android (и, вероятно, в более поздних версиях Android). Кто-нибудь знает почему? Может есть другой способ очистить кеш?

В частности, меня интересует очистка кэша карт Google, и решение, написанное выше, работает для меня в Android 4.0, но не в Android 4.2.2. Любая помощь будет оценена.

Я не получаю никаких ошибок в logcat. Устройство: Samsung Galaxy Tab 2 7.0'

1 ответ

Я пишу это как ответ, потому что мой комментарий, вероятно, будет похоронен. Даже у меня были проблемы с очисткой кеша в устройстве 4.2.2, этот код Дэвида Вассера в этом посте работал для меня.

PackageManager  pm = getPackageManager();
     // Get all methods on the PackageManager
Method[] methods = pm.getClass().getDeclaredMethods();
for (Method m : methods) {
    if (m.getName().equals("freeStorage")) {
        try {
            long desiredFreeStorage = 8 * 1024 * 1024 * 1024; 
            m.invoke(pm, desiredFreeStorage , null);
        } catch (Exception e) {
           // Method invocation failed. Could be a permission problem
        }
        break;
    }
}
Другие вопросы по тегам