当前位置: 首页 > 知识库问答 >
问题:

如何在Android中使用可访问性服务删除缓存?

段恩
2023-03-14

我正在开发缓存清理应用程序,在谷歌上做了研究后,我发现Android系统已经将“Clear_App_Cache”权限移到了“签名,特权”状态。所以我无法用FreestorageandNotify方法清除缓存。

谷歌playstore上的应用程序,如CCleaner、Power Clean等。正在使用辅助功能服务删除缓存。

我也为我的应用程序创建了基本的可访问性服务,但不知道如何删除应用程序的缓存

共有1个答案

西门山
2023-03-14

您可以获得已安装应用程序的列表并删除缓存,如下所示:

    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;
        }
    }

它相当于设置-->应用程序管理器-->您的应用程序-->清除数据下的清除数据选项。(评论中)

为了使您的应用程序支持这一点,您还应该遵循google的特权权限白名单

 类似资料:
  • 我的密码是 有什么办法解决这个问题吗

  • 我正在开发一个运行辅助功能服务的Android应用程序。我在AndroidStudio中开发了服务java类和配置xml文件,将其作为本机应用程序进行测试。当我运行它时,辅助功能服务会按预期显示在Android辅助功能设置中,我可以启用它。 然而,我想把这项服务集成在Qt快速Android应用程序中。当我添加相同的java类、清单和配置xml文件时,项目编译并运行良好,但服务不会出现在Androi

  • 我想以编程方式启用/禁用设置->辅助功能选项下列出的辅助功能服务。 我可以像下面这样开始可访问性意图: 但是对于如何通过我的代码启用视图中列出的服务,我没有任何想法。 请把你的观点告诉我。

  • 问题内容: 我已经安装了django服务器,可以如下访问 假设我的IP是xxxx。 当我在同一网络下的另一台PC上运行时 它不起作用。 我可以轻松地用那台计算机ping我的IP。 而且在我的81号港口我有apache,可以像下面这样方便地访问 可能是什么问题?我在Django是否需要其他东西 问题答案: 运行Django开发服务器 这就是你想要的。为了进一步帮助你,你应该执行以下操作: 顺便说一句

  • 我该怎么办?要去哪里买什么?我遇到了问题,我尝试了删除*和只删除,但这些并没有真正的工作 }

  • 问题内容: 我是Android开发的新手,我有一个用php制作的Web服务,现在我想在android中使用它,任何人都可以指导我如何实现这一目标。 我已经在网上尝试了许多代码示例,但未能实现此目标。我在ADT中使用Eclipse。 任何帮助都会得到应用。 问题答案: 请通过以下链接。您将在此处找到代码示例 http://www.anddev.org/calling_a_web_service_fr