2015-01-20 3 views
0

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

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 '

+0

В лоцкатке нет ошибок? С каким устройством (устройствами) у вас это поведение? – shkschneider

+2

'очистить наличные деньги приложения - вы хотите очистить' cash' или 'cache'? –

+0

shkschneider, без ошибок в logcat. Прибор: Samsung Galaxy Tab 2 7.0 ' – user2999943

ответ

1

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

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; 
    } 
} 
Смежные вопросы