如何以编程方式清除Android 4.2.2及更高版本中的应用程序缓存

时间:2015-01-20 14:26:41

标签: java android eclipse google-maps android-sdk-tools

在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中收到任何错误。设备:三星Galaxy Tab 2 7.0&#39;

1 个答案:

答案 0 :(得分: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;
    }
}