以编程方式清除应用缓存?

时间:2011-01-05 15:09:03

标签: java android mobile

我想编写一个实用程序,用户可以在其中选择一组已安装的应用程序并清除其数据缓存,例如您可以使用内置设置 - >应用程序设置屏幕和“清除缓存”手动执行的方式按钮。

如何访问每个应用程序拥有的缓存数据量并以编程方式清除这些缓存?

3 个答案:

答案 0 :(得分:6)

这里给出的答案是错误的,有市场应用程序具有程序化清除所有应用程序缓存功能。此外,文档中还有以下内容:

public static final String CLEAR_APP_CACHE

自:Android中的API级别1 允许应用程序清除设备上所有已安装应用程序的缓存。 常数值:

 android.permission.CLEAR_APP_CACHE

请注意“所有已安装的应用程序部分”,以及除标准用户权限之外不需要任何root访问权限或特殊权限的事实。

我在这里发帖是因为我要求可交付成果每24小时在店内演示手机中清除所有应用程序缓存,并且我正在试图弄清楚如何正确使用它。我知道解决方案的一部分是获得此权限,我也知道如何在设备上找到所有已安装的应用程序,我正在努力实际删除缓存。我的问题是其他应用程序缓存读取为不包含任何文件(尽管有内容),我怀疑因为我没有读取权限使列表文件调用。

答案 1 :(得分:2)

普通的SDK应用程序无权访问,更不用说修改其他应用程序的缓存,只不过他们有权​​破解您的文件。

这可能适用于以root身份运行应用程序的root电话,在这种情况下,您必须根据应用程序手动构建路径。包名。

答案 2 :(得分:0)

您应该在清单中拥有此权限:

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

之后,您可以使用PackageManager清除所有程序的缓存:

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

这要求Android清除足够的缓存文件,以便有8GB空闲。如果你设置这个数字足够高,你应该达到你想要的(Android将删除缓存中的所有文件)。 当您调用 freeStorage() 时,它会检查存储量(在这种情况下为8GB)是否可用于缓存文件。如果没有,它会首先删除最旧的文件,从应用程序的缓存目录中删除文件。它会继续删除文件,直到没有任何文件要删除,或者它已经释放了您请求的存储量(在这种情况下为8GB)。