广告
返回顶部
首页 > 资讯 > 移动开发 >关于Android8 获取应用容量的问题(权限获取)
  • 268
分享到

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

Android 2022-06-06 13:06:21 268人浏览 安东尼
摘要

在Android 8.0以后,Google出于安全的考虑,废除了以前的方法,但是为我们提供了新的api,我们可以使用StorageStatsManager 类来获取应用大小、用

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


--结束END--

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

本文链接: https://www.lsjlt.com/news/29578.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作