有没有办法以编程方式清除所有缓存文件?

Posted

技术标签:

【中文标题】有没有办法以编程方式清除所有缓存文件?【英文标题】:Is there any way to Clear all Cache files programmatically? 【发布时间】:2021-09-21 11:11:03 【问题描述】:

我正在开发一个删除所有程序缓存的程序。这个问题之前被问过很多次,但是解决方案要么在较新版本的 Android 中被删除,要么没有清除 所有 缓存,或者他们需要 root 设备。

我在android docs 中找到了一个添加到api 30 中的解决方案,应该使用Activity#startActivityForResult(Intent, int) 启动,以便用户知道哪个应用程序正在请求清除缓存。 此操作需要清单中的Manifest.permission.MANAGE_EXTERNAL_STORAGE

我在我的清单中有这个权限,我在我的 OnClick 方法中使用了以下代码:

Intent clearCache = new Intent();
clearCache.setAction(ACTION_CLEAR_APP_CACHE);
startActivity(clearCache);

但它不适用于我的 Android 11 设备。有人知道代码问题吗?

谢谢。

【问题讨论】:

“但它在我的 Android 11 设备中不起作用”——您希望它做什么?请注意,您的 Intent 不适用于 ACTION_CLEAR_APP_CACHE 【参考方案1】:

这个意图应该使用 Activity#startActivityForResult(Intent, int) 让用户知道 哪个应用请求清除缓存。

检查documentation。

使用“startActivityForResult”代替“startActivity”:

//Get cache dialog
int requestCode = 999;
Intent intent = new Intent(StorageManager.ACTION_CLEAR_APP_CACHE);
activity.startActivityForResult(intent, requestCode);

【讨论】:

以上是关于有没有办法以编程方式清除所有缓存文件?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式清除 WinInet DNS 缓存

在 Mac OS X 上清除缓冲区缓存

如何以编程方式清除缓存?

以编程方式使 Silverlight XAP 文件从浏览器缓存中过期

如何以编程方式清除 MSIE/WinInet 缓存?

Sitecore - 以编程方式清除用户的缓存