2

我一直在这里阅读有关清理另一个应用程序cahce-memory 的信息,并且我还尝试编写自己的应用程序。我得到的结果是,使用 Android 当前的安全层,这是不可能的。

但是,目前市场上有许多缓存清理应用程序(Google Play)?

当我启动我授予android.permission.DELETE_CACHE_FILES权限的应用程序时,LogCat 打印了

Not granting permission android.permission.DELETE_CACHE_FILES to package <MY_PACKAGE_NAME> (protectionLevel=3 flags=0x8be46)

经过一些研究,我发现 3:rd 方应用程序不会被授予权限,protectionLevel=3所以每当我尝试删除另一个应用程序缓存(逻辑上)时,我都会遇到 java.lang.SecurityException

我的问题是:“Google Play 上的这些应用程序如何允许并能够删除其他应用程序缓存?”

对不起我的英语不好,不是母语人士

4

3 回答 3

4

只有当设备被 root 并且您的应用程序具有超级用户权限时,您才能执行此操作。

于 2012-12-27T00:19:02.093 回答
0

让我告诉你这些应用程序是如何实现这一点的。

一些默认情况下android classes have methodsprivate(@hidden)用户的。我们不能直接访问它们。但你有更好的方法来使用Reflection.

添加权限。

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

并按照这些答案

https://stackoverflow.com/a/17334600/3496570

https://stackoverflow.com/a/14509140/3496570

并且不要忘记创建一个package名称android.content.pm并将IPackageDataObserver.aidl添加到 package 。那你就可以走了。

于 2015-03-30T08:32:17.700 回答
0

对于 Android 11 及更高版本,您可以使用 ACTION_CLEAR_APP_CACHE。此操作不会自动清除应用缓存,但会显示一个系统对话框并让用户决定。

它还需要 MANAGE_EXTERNAL_STORAGE 权限,请查看文档。

用法:

安卓清单:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    android:minSdkVersion="30"
    tools:ignore="ScopedStorage" />

清除所有缓存:

//Get the cache dialog
int requestCode = 999;
Intent intent = new Intent(StorageManager.ACTION_CLEAR_APP_CACHE);
activity.startActivityForResult(intent, requestCode);
于 2021-10-03T10:28:59.080 回答