在Android 6.0

时间:2016-03-29 07:11:03

标签: android

我使用方法freeStorageAndNotify()和权限android.permission.CLEAR_APP_CACHE来删除所有已安装应用程序的系统缓存。但该方法开始从android marshmallow 6.0版本中抛出InvocationTargetException。 在谷歌搜索问题后,我发现这里报告了同样的问题: Android M reflection method freeStorageAndNotify exception 因此,结论是freeStorageAndNotify()停止了工作,因为谷歌已经将方法的签名级别提升到了签名系统。

但现在问题是其他第三方应用程序如何'清洁大师'仍然可以通过获取用户对6.0设备的访问权限来删除所有已安装应用程序的系统缓存吗?

3 个答案:

答案 0 :(得分:0)

我正在使用的系统清理程序可以访问STORAGE权限。此权限使应用程序权限可以清除共享外部存储目录中的任何数据。

http://developer.android.com/reference/android/Manifest.permission_group.html#STORAGE

我不认为任何第三方应用程序实际上都可以清除系统缓存,除非该设备已植根并且该应用程序是为root设备设计的。

clean Master permission

clean Master asking for permission

答案 1 :(得分:0)

我不认为'清洁大师'实际上使用辅助功能权限来清理已安装的应用缓存。 但是,如果您有兴趣,可以在应用程序中使用AccessibilityService来实现此目标。 在扩展AccessibilityService的类中,您有此回调:

    @Override
    public void onAccessibilityEvent(AccessibilityEvent aEvent) {
       AccessibilityNodeInfo rootNode = aEvent.getSource();
       //...
    }

在这里你可以调用 rootNode.findAccessibilityNodeInfosByViewId() 要么 rootNode.findAccessibilityNodeInfosByText(), 它将返回树中所有匹配的AccessibilityNodeInfo个对象(子节点)。然后,您只需要检测哪些是Buttonnode.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可以限制他们的技巧..