我使用方法freeStorageAndNotify()
和权限android.permission.CLEAR_APP_CACHE
来删除所有已安装应用程序的系统缓存。但该方法开始从android marshmallow 6.0版本中抛出InvocationTargetException
。
在谷歌搜索问题后,我发现这里报告了同样的问题:
Android M reflection method freeStorageAndNotify exception
因此,结论是freeStorageAndNotify()
停止了工作,因为谷歌已经将方法的签名级别提升到了签名系统。
但现在问题是其他第三方应用程序如何'清洁大师'仍然可以通过获取用户对6.0设备的访问权限来删除所有已安装应用程序的系统缓存吗?
答案 0 :(得分:0)
我正在使用的系统清理程序可以访问STORAGE权限。此权限使应用程序权限可以清除共享外部存储目录中的任何数据。
http://developer.android.com/reference/android/Manifest.permission_group.html#STORAGE
我不认为任何第三方应用程序实际上都可以清除系统缓存,除非该设备已植根并且该应用程序是为root设备设计的。
答案 1 :(得分:0)
我不认为'清洁大师'实际上使用辅助功能权限来清理已安装的应用缓存。
但是,如果您有兴趣,可以在应用程序中使用AccessibilityService
来实现此目标。
在扩展AccessibilityService
的类中,您有此回调:
@Override
public void onAccessibilityEvent(AccessibilityEvent aEvent) {
AccessibilityNodeInfo rootNode = aEvent.getSource();
//...
}
在这里你可以调用
rootNode.findAccessibilityNodeInfosByViewId()
要么
rootNode.findAccessibilityNodeInfosByText()
,
它将返回树中所有匹配的AccessibilityNodeInfo
个对象(子节点)。然后,您只需要检测哪些是Button
(node.getClassName()
)并致电subNode.performAction(AccessibilityNodeInfo.ACTION_CLICK)
。
在Android M上,您首先需要为具体应用打开系统的App Info
屏幕(您可以在这里找到How can I start android application info screen programmatically?的说明),并按照上述方案执行顺序点击按钮"存储" - > "清除缓存"。
为了清除所有已安装应用的缓存,您可能需要遍历所有已安装的应用(List<ApplicationInfo> installedApplications = context.getPackageManager.getInstalledApplications(0);
)
并重复上述程序。
答案 2 :(得分:-4)
这些应用程序始终只做同样的事情。在旧设备和新设备上使用它,结果是相同的。我见过的唯一帮助是他们可以杀死或重启一些后台进程,而不是清理缓存。因此没有API可以限制他们的技巧..