Java 以编程方式清除牛轧糖中的缓存不允许

Java 以编程方式清除牛轧糖中的缓存不允许,java,android,android-7.0-nougat,Java,Android,Android 7.0 Nougat,在服务器上执行某些活动后,我想清除应用程序的缓存。它在三星手机(安卓5.0)上运行良好,但在华为手机(安卓7)上没有清除缓存。 我认为牛轧糖并没有批准这个应用。任何关于这个问题的帮助都将不胜感激 缓存清除代码: public static void trimCache(Context context) { try { Toast.makeText(context,"hit on trim function ",Toast.LENG

在服务器上执行某些活动后,我想清除应用程序的缓存。它在三星手机(安卓5.0)上运行良好,但在华为手机(安卓7)上没有清除缓存。 我认为牛轧糖并没有批准这个应用。任何关于这个问题的帮助都将不胜感激

缓存清除代码:

       public static void trimCache(Context context) {
         try {
        Toast.makeText(context,"hit on trim function 
        ",Toast.LENGTH_SHORT).show();
        File dir = context.getCacheDir();
        if (dir != null && dir.isDirectory()) {
            boolean check =deleteDir(dir);
            System.out.println("cache content check" +check);
        }
    } catch (Exception e) {
        // TODO: handle exception
    }
}

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

    // The directory is now empty so delete it
    return dir.delete();
}
公共静态缓存(上下文){
试一试{
makeText(上下文,“点击修剪函数
“,Toast.LENGTH_SHORT).show();
File dir=context.getCacheDir();
if(dir!=null&&dir.isDirectory()){
布尔检查=删除目录(目录);
System.out.println(“缓存内容检查”+检查);
}
}捕获(例外e){
//TODO:处理异常
}
}
公共静态布尔deleteDir(文件目录){
Log.e(“主要活动”、“内部删除”);
if(dir!=null&&dir.isDirectory()){
String[]children=dir.list();
Log.e(“Mainactivity”,“如果条件为内部删除”+子项);
for(int i=0;i
在清单中添加了权限:

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

我认为@commonware的答案很好地解释了您的问题:

在Android 6.0之前,CLEAR_APP_缓存的保护级别为 危险,因此普通SDK应用程序可以在清单中请求它

从Android 6.0开始,CLEAR_APP_缓存的保护级别为 签名|特权。普通的安卓应用程序无法容纳这一点 许可。仅当您的应用已签名时,您才能保留此权限 使用固件的签名密钥,或者您安装在特权服务器上 系统分区


无论是低于Android 6.0还是高于Android 6.0,这对我来说都很有效:

  • 声明清单权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  • 试试看:
    private static void deleteCache(Context context) {
        try {
            File dir = context.getCacheDir();
            deleteDir(dir);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static boolean deleteDir(File dir) {
        if (dir != null && dir.isDirectory()) {
            String[] children = dir.list();
            for (String aChildren : children) {
                boolean success = deleteDir(new File(dir, aChildren));
                if (!success) {
                    return false;
                }
            }
            return dir.delete();
        } else if (dir != null && dir.isFile()) {
            return dir.delete();
        } else {
            return false;
        }
    }