【问题标题】:How To Delete Cache Using Accessibility Service in Android?如何在 Android 中使用辅助功能服务删除缓存?
【发布时间】:2018-04-28 09:58:49
【问题描述】:

我正在开发缓存清理器应用程序,在对 google 进行研究后,我发现 Android 系统已将“CLEAR_APP_CACHE”权限移至“签名,特权”状态。所以我无法使用freeStorageAndNotify 方法清除缓存。

CCleanerPower Clean 等 google playstore 上的应用正在使用辅助功能服务删除缓存。

我还为我的应用创建了基本的无障碍服务,但不知道如何删除应用缓存

【问题讨论】:

标签: android caching


【解决方案1】:

您可以获取已安装应用的列表并删除缓存,例如:

    public static void clearALLCache()
            {
                List<PackageInfo> packList = getPackageManager().getInstalledPackages(0);
            for (int i=0; i < packList.size(); i++)
            {
                PackageInfo packInfo = packList.get(i);
                if (  (packInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0)
                {
                    String appName = packInfo.applicationInfo.loadLabel(getPackageManager()).toString();
                    try {
                        // clearing app data
    //                    Runtime runtime = Runtime.getRuntime();
    //                    runtime.exec("pm clear "+packInfo.packageName);
                        Context context = getApplicationContext().createPackageContext(packInfo.packageName,Context.CONTEXT_IGNORE_SECURITY);
                        deleteCache(context);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            }

public static void deleteCache(Context context) {
        try {
            File dir = context.getCacheDir();
            deleteDir(dir);
        } catch (Exception e) {}
    }

    public static boolean deleteDir(File dir) {
        if (dir != null && dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
            return dir.delete();
        } else if(dir!= null && dir.isFile()) {
            return dir.delete();
        } else {
            return false;
        }
    }

相当于设置-->应用管理-->你的应用-->清除数据下的清除数据选项。 (在评论中)

为了让您的应用程序支持这一点,您还应该关注Privileged Permission Whitelisting from google

【讨论】:

  • @Jyoti JK 不,我在我的设备中测试没有植根并且可以工作,需要清单中的权限
  • 如何只清除缓存Settings --&gt; Application Manager --&gt; Your App --&gt; Clear cache
  • @Jyoti JK 检查我更新的答案,它唯一清除已安装应用程序的数据,而不是预安装的系统
  • 感谢您的努力。我已经尝试过这种方法。我已经在 IPackageStatsObserver.aidl 的帮助下清除了缓存。但它适用于 api23 ,我没有得到任何技巧。一些应用程序需要访问权限来清理缓存。这就是为什么我开始赏金以了解他们如何清理缓存。
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多