我正在编写一个可以以编程方式清除设备上安装的所有第三方应用程序的应用程序缓存的应用程序。 以下是Android 2.2的代码段

public static void trimCache(Context myAppctx) {

    Context context = myAppctx.createPackageContext("com.thirdparty.game", 
            Context.CONTEXT_INCLUDE_CO|Context.CONTEXT_IGNORE_SECURITY);

    File cachDir = context.getCacheDir();        
    Log.v("Trim", "dir " + cachDir.getPath());

    if (cachDir!= null && cachDir.isDirectory()) {

        Log.v("Trim", "can read " + cachDir.canRead());
        String[] fileNames = cachDir.list();
        //Iterate for the fileName and delete
    }
}

我的清单具有以下权限:

android.permission.CLEAR_APP_CACHE
android.permission.DELETE_CACHE_FILES

现在的问题是,打印了缓存目录的名称,但是文件cachDir.list()的列表始终返回null。 我无法删除缓存目录,因为文件列表始终为空。

还有其他清除应用程序缓存的方法吗?

===============>>#1 票数:6

“ android.permission.CLEAR_APP_CACHE” android.permission.DELETE_CACHE_FILES“

普通的SDK应用程序不能拥有DELETE_CACHE_FILES权限。 虽然可以保留CLEAR_APP_CACHE ,但Android SDK中没有任何东西可以清除应用程序的缓存。

还有其他清除应用程序缓存的方法吗?

欢迎您通过删除该缓存中的文件来清除自己的缓存。

===============>>#2 票数:2

Poate iti merge asta

static int clearCacheFolder(final File dir, final int numDays) {

        int deletedFiles = 0;
        if (dir!= null && dir.isDirectory()) {
            try {
                for (File child:dir.listFiles()) {

                    //first delete subdirectories recursively
                    if (child.isDirectory()) {
                        deletedFiles += clearCacheFolder(child, numDays);
                    }

                    //then delete the files and subdirectories in this dir
                    //only empty directories can be deleted, so subdirs have been done first
                    if (child.lastModified() < new Date().getTime() - numDays * DateUtils.DAY_IN_MILLIS) {
                        if (child.delete()) {
                            deletedFiles++;
                        }
                    }
                }
            }
            catch(Exception e) {
                Log.e("ATTENTION!", String.format("Failed to clean the cache, error %s", e.getMessage()));
            }
        }
        return deletedFiles;
    }

    public static void clearCache(final Context context, final int numDays) {
        Log.i("ADVL", String.format("Starting cache prune, deleting files older than %d days", numDays));
        int numDeletedFiles = clearCacheFolder(context.getCacheDir(), numDays);
        Log.i("ADVL", String.format("Cache pruning completed, %d files deleted", numDeletedFiles));
    }

===============>>#3 票数:2

查看android.content.pm.PackageManager.clearApplicationUserData: http : //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/content/pm/ PackageManager.java/该类中的其他隐藏方法也可能有用。

如果您以前从未使用过隐藏方法,则可以使用Java反射来访问隐藏方法。

===============>>#4 票数:0

我不确定这在约定方面是否合适,但是到目前为止,在我的Global Application类中,这对我来说仍然有效:

    File[] files = cacheDir.listFiles();
    for (File file : files){
        file.delete();
    }

当然,这不能解决嵌套目录,这可以通过这样的递归函数来完成(未经子目录的广泛测试):

deleteFiles(cacheDir);

private void deleteFiles(File dir){
    if (dir != null){
        if (dir.listFiles() != null && dir.listFiles().length > 0){
            // RECURSIVELY DELETE FILES IN DIRECTORY
            for (File file : dir.listFiles()){
                deleteFiles(file);
            }
        } else {
            // JUST DELETE FILE
            dir.delete();
        }
    }
}

我没有使用File.isDirectory因为它在我的测试中不可靠。

  ask by Srao translate from so

未解决问题?本站智能推荐:

1回复

Android清除应用程序缓存还会清除提供商

我使用以下代码删除了我的应用缓存。 一旦我删除了代码,则意味着它删除了我在清单中声明的​​提供程序。 有什么方法可以清除缓存而不删除内容提供程序吗?
1回复

清除Android中其他应用程序的缓存不重复

嗨,我正在尝试从我的应用程序中清除其他应用程序缓存,现在我可以使用以下代码清除其他应用程序缓存,直到Android 4.1.2版本 并且IPackageDataObserver代码是 但是,当我在4.2及更高版本的android版本中运行同一应用程序时,缓存无法清除。 请有人帮
2回复

自动清除Android中应用更新的用户缓存

android API中是否有任何方法(理想情况下为2.3.6及更高版本),如果他们下载新版本的应用程序,则清除用户缓存? 环顾四周似乎没有提到任何一个 - 或者我是否完全脱离了球并且在安装新版本时缓存被清空了?
3回复

在android中退出时清除应用程序缓存

我想要做的是在应用程序退出时清除应用程序的缓存内存。 这个任务我可以通过这个步骤手动完成。 <应用程序 - >管理应用程序 - >“我的应用程序” - >清除缓存>> 但我想通过编程退出应用程序来完成这项任务..请帮助我们.. 提前致谢
1回复

反映清除Android应用程序缓存的方法

我正在尝试清除我自己以外的其他Android应用程序的应用程序缓存。 为此,我在PackageManager类上使用了反射。 但是,每当我在调用该方法之前初始化该方法时,它总是以null结尾。 这是我的问题所在: 因为方法deleteApplicationCacheFiles
3回复

缓存清除后重新启动Android应用程序

我在安装Android应用程序的更新后使用clearApplicationUserData()来清除应用程序缓存。 一旦上述方法运行,app立即关闭。 关闭应用程序本身后重启应用程序的任何建议?
1回复

如何清除Android Marshmallow中的所有应用缓存数据

我知道这个问题被问了很多次,因为我读了所有的答案,但没有人给我完整的解决方案。 如果Android 6+不允许清除所有应用缓存数据,那么Clean Master应用程序是如何工作的。 Android在Signature | Prvilege类别中添加了此权限,然后是如何获取访问权限。 请帮
2回复

如何清除Android中另一个应用程序的缓存?

我需要什么许可? 文件夹appDir.exists(),但不是appDir.canRead()。
7回复

以编程方式清除Android应用程序中的缓存

什么是以编程方式清除android应用程序中的缓存的正确方法。 我已经在使用以下代码,但对我来说似乎不起作用
2回复

Android:如何同时清除所有应用程序的缓存

我对android很新。 我想开发一个学习应用程序,点击一个按钮将清除Android设备中所有已安装应用程序的缓存内存。我知道这种类型的应用程序可以在谷歌播放,但我想自己开发。 我尝试以下代码,但它清除当前一个应用程序的缓存内存并抛出空指针异常。 我需要同时清除每个应用程序的缓存。 请帮