Java 以编程方式清除牛轧糖中的缓存不允许
在服务器上执行某些活动后,我想清除应用程序的缓存。它在三星手机(安卓5.0)上运行良好,但在华为手机(安卓7)上没有清除缓存。 我认为牛轧糖并没有批准这个应用。任何关于这个问题的帮助都将不胜感激 缓存清除代码: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
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;
}
}