[英]Clearing app cache programmatically?
我想编写一个实用程序,用户可以在其中选择一组已安装的应用程序并清除其数据缓存,例如您可以使用内置的“设置” - >“应用程序”设置屏幕和“清除缓存”按钮手动执行此操作。
如何访问每个应用程序拥有的缓存数据量并以编程方式清除这些缓存?
这里给出的答案是错误的,有市场应用程序具有程序清除所有应用程序缓存功能。 此外,文档中还包含以下内容:
public static final String CLEAR_APP_CACHE
从以下版本开始:android中的API Level 1允许应用程序清除设备上所有已安装应用程序的缓存。 常数值:
android.permission.CLEAR_APP_CACHE
请注意“所有已安装的应用程序部分”,以及除标准用户权限之外不需要任何超级用户访问权限或特殊权限的事实。
我在这里发帖是因为我要求可交付成果每24小时在店内演示电话中清除所有应用程序缓存,并且我正在试图弄清楚如何正确使用它。 我知道解决方案的一部分是获得此权限,我也知道如何在设备上找到所有已安装的应用程序,我正在努力实际删除缓存。 我的问题是其他应用程序缓存读取为不包含任何文件(尽管有内容),我怀疑因为我没有读取权限使列表文件调用。
普通的SDK应用程序无权访问,更不用说修改其他应用程序的缓存,只不过他们有权破解您的文件。
这可能适用于以root用户身份运行应用程序的root电话,在这种情况下,您必须根据应用程序的软件包名称手动构建路径。
您应该在清单中拥有此权限:
<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)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.