我想在服务器上执行一些活动后清除应用程序的缓存。在三星手机(Android 5.0)中可以正常工作,但在华为手机(Android 7)中无法清除缓存。 我认为Nougat未授予该应用程序的许可。有关此问题的任何帮助将不胜感激。
缓存清除代码:
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();
}
在清单中添加了权限:
<uses-permission android:name="android.permission.CLEAR_APP_CACHE"
tools:ignore="ProtectedPermissions"/>
答案 0 :(得分:0)
我认为您的问题在@CommonsWare答案here中得到了很好的解释:
在Android 6.0之前,CLEAR_APP_CACHE的保护级别为 危险,因此普通的SDK应用程序可能会在清单中提出要求。
从Android 6.0开始,CLEAR_APP_CACHE的保护级别为 签名。普通的Android应用无法容纳此功能 允许。如果您的应用已签名,则只能持有此权限 使用固件的签名密钥,或者您以特权安装 系统分区。
答案 1 :(得分:0)
对于低于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;
}
}