2015-01-20 6 views
0

위의 프로그래밍 방식 명확한 응용 프로그램 캐시 :어떻게 안드로이드 4.2.2에서 나는 내 응용 프로그램 캐시를 지우려면이 솔루션을 사용하고 완벽하게 작동 안드로이드 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 안드로이드 버전 (아마 위의 안드로이드 버전에서도 가능). 왜 그런지 압니까? 어쩌면 캐시를 지우는 다른 방법이 있을까요?

Particulary Google지도 캐시 지우기에 관심이 있습니다. 위에서 작성한 솔루션은 Android 4.0에서 작동하지만 Android 4.2.2에서는 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

logcat에서 오류가 발생하지 않습니다. 기기 : Samsung Galaxy Tab 2 7.0 '

+0

logcat에 오류가 없습니까? 이 장치가있는 장치는 무엇입니까? – shkschneider

+2

'내 애플리케이션 현금을 지우려면'- '현금'또는 '캐시'를 지우시겠습니까? –

+0

shkschneider, logcat에 오류가 없습니다. 기기 : Samsung Galaxy Tab 2 7.0 ' – user2999943

답변

1

나는 내 의견이 묻힐 가능성이 높기 때문에 답으로 쓰고 있습니다. 4.2.2 장치에서 캐시를 지우는 데 문제가 있어도이 코드의 David Wasser가 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; 
    } 
}