为了账号安全,请及时绑定邮箱和手机立即绑定

以编程方式清除 Nougat 中的缓存不允许

以编程方式清除 Nougat 中的缓存不允许

HUX布斯 2021-06-11 10:09:41
我想在服务器上执行一些活动后清除我的应用程序的缓存。它在三星手机(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"/>
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

对于低于 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;

    }

}


查看完整回答
反对 回复 2021-06-17
?
慕森卡

TA贡献1806条经验 获得超8个赞

我觉得你的问题是

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

从 Android 6.0 开始,CLEAR_APP_CACHE 的保护级别为签名|特权。普通 Android 应用无法持有此权限。只有当您的应用程序使用固件的签名密钥进行签名或者您安装在特权系统分区上时,您才能拥有此权限。


查看完整回答
反对 回复 2021-06-17
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信