Android 运行时权限
来源:互联网 发布:住建部bim大数据库 编辑:程序博客网 时间:2024/05/29 04:33
半年前换过手机之后,就发现许多软件在安装之后已经授权过的内容,实际使用的过程中,会再次向我询问权限。这几天在开发的过程中,也遇到了明明在AndroidManifest.xml文件中申请过权限了,可是程序依旧抛错,没有权限的问题。调查以后发现,Android在6.0系统中引用了运行时权限这个功能,从来更好的保护用户的安全和隐私。
Android将权限归为两类,一类是普通权限,一类是特殊权限。对于不会威胁到用户安全和隐私的普通权限,系统会自动帮我们进行授权,对于危险权限,必须用户授权。以下是危险权限:
比如,我们需要申请读写存储文件的权限,可以这么申请:
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE , Manifest.permission.READ_EXTERNAL_STORAGE}; List<String> mPermissionList = new ArrayList<String>(); for (int i = 0; i < permissions.length; i++) { if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) { mPermissionList.add(permissions[i]); } } if (mPermissionList.isEmpty()) { return; } String[] permissionArray = mPermissionList.toArray(new String[mPermissionList.size()]); ActivityCompat.requestPermissions(this, permissionArray, 1);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1); }
调用完毕之后,系统会弹出询问权限是否授权的dialog,无论统一还是拒绝都会调用onRequestPermissionsResult()方法,授权结果会封装在grantResults中。
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case 1: for (int i = 0; i < permissions.length; i++) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { //判断是否勾选禁止后不再询问 boolean showRequestPermission = ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i]); if (showRequestPermission) { ActivityCompat.requestPermissions(this, new String[]{permissions[i]}, 1); } else { // 如果用户在过去拒绝了权限请求,并在权限请求系统对话框中选择了 Don’t ask again 选项,此方法将返回 false。如果设备规范禁止应用具有该权限,此方法也会返回 false。 Toast.makeText(this, "请前往设置开启权限", Toast.LENGTH_SHORT).show(); return; } } } ...... break; default: break; } }
参考:第一行代码第2版
阅读全文
0 0
- Android 运行时权限
- android运行时权限
- Android运行时权限
- Android 运行时权限
- android运行时权限
- android运行时权限
- Android 运行时权限
- Android运行时权限
- Android 运行时权限
- Android运行时权限
- Android-运行时权限
- Android运行时权限
- Android 运行时权限
- Android运行时权限
- Android 运行时权限
- Android 运行时权限
- Android运行时权限(危险权限)
- Android 6.0运行时权限
- eclipes下载远程仓库项目到本地
- 配置阿里云maven中央仓库
- 恶意代码分析实战 Lab 2 习题笔记
- Vue过滤器与计算属性
- 算法模板之01背包问题
- Android 运行时权限
- NLTK02 《Python自然语言处理》code01 语言处理与Python
- 扩展欧几里德 ———求解不定方程
- 梦的真相是科学和幻听、幻视不是病,所以(建德第四人民医院 余杭同德医院 浙江第七人民医院)医生卖药是骗人钱财!
- java类加载详细解答精华
- Java IO的RandomAccessFile的使用
- 超越MySQL:三个流行MySQL分支的对比
- 软件测试干货——敏捷测试流程
- 梯度下降