文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

关于Android8 获取应用容量的问题(权限获取)

2022-06-06 13:58

关注

在Android 8.0以后,google出于安全的考虑,废除了以前的方法,但是为我们提供了新的API,我们可以使用StorageStatsManager 类来获取应用大小、用户数据和缓存,从而得到应用的总大小。但是在使用StorageStatsManager 类获取时,我们需要android.permission.PACKAGE_USAGE_STATS 权限。所以在Android 8.0以后要获取应用的总大小,我们必须先申请权限,用户授权了之后才能获取。首先,我们要判断是否开启了android.permission.PACKAGE_USAGE_STATS 权限,代码如下:
 

1.检查权限及申请

(以下代码仅为局部代码!!!  回调代码未贴出!!!)


boolean granted = false;
Context context = activity.getApplicationContext();
AppOpsManager appOps = (AppOpsManager)context
        .getSystemService(Context.APP_OPS_SERVICE);
int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
        android.os.Process.myUid(), context.getPackageName());
Log.d(TAG, "requestPermission: mode" + mode);
if (mode == AppOpsManager.MODE_DEFAULT) {
    granted = (context.checkCallingOrSelfPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) == PackageManager.PERMISSION_GRANTED);
} else {
    granted = (mode == AppOpsManager.MODE_ALLOWED);
}
Log.d(TAG, "requestPermission: granted"+granted);
if(granted){
    //12 是权限的申请码  Manifest.permission.PACKAGE_USAGE_STATS
    //iPermCallBack 为回调接口
    iPermCallBack.permissionGranted(12);
}else{
    if (ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission)) {
        //
        shouldShowRationale(activity, 12, requestPermission);
    } else {
        ActivityCompat.requestPermissions(activity, new String[]{requestPermission},12);
    }
}

// 以下是展示提示框


private static void shouldShowRationale(Activity activity, int requestCode, String requestPermission) {
    showMessageOKCancel(activity, "Rationale:" + requestPermission, (dialog, which) -> {
        ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode);
    },null);
}

private static void showMessageOKCancel(Activity activity, String msg, DialogInterface.OnClickListener okListener,DialogInterface.OnClickListener cancelListener) {
    new AlertDialog.Builder(activity)
            .setMessage(msg)
            .setPositiveButton("ok", okListener)
            .setNegativeButton("cancel",cancelListener)
            .create().show();
}
2.下面是重点

用户获取  Manifest.permission.PACKAGE_USAGE_STATS  权限,不仅需要在androidManifest.xml文件中声明

更需要利用动态权限去申请(ps  非系统软件需要手动授权    )


// 以下方法 为 跳转到手动打开权限的界面
private static void openSettingPackagePermActivity(Activity activity,String msg){
    showMessageOKCancel(activity,msg,(dialog,which)->{
        Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        activity.startActivity(intent);
    },null);
}

作者:苏晨311


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯