android-详解Android 6.0运行时权限
感谢郭神,从Android 6.0开始,不再是安装应用时用户确定获得全部的权限.而是在使用软件过程中需要该权限时,弹出对话框让用户选择权限.不仅如此,用户选择权限后还可以关闭。
检查是否获得权限
通过 ContextCompat.checkSelfPermission(context,permission) 方法,方法返回值为 PackageManager.PERMISSION_GRANTED or PackageManager.PERMISSION_DENIED:
请求权限
通过 ActivityCompat.requestPermissions(activity,permissions,requestCode),第二个参数是一个String数组,第三个参数是请求码便于在 onRequestPermissionsResult 方法中根据requestCode进行判断:
请求权限后的回调
请求权限后会回调 onRequestPermissionsResult 方法,在activity中重写 onRequestPermissionsResult(requestCode,permissions,grantResults) 方法, grantResults 是int类型的数组每个值为 PackageManager.PERMISSION_GRANTED or PackageManager.PERMISSION_DENIED 分别对应 permissions 的每个请求:
告诉用户为何需要权限
ActivityCompat.shouldShowRequestPermissionRationale(activity,permission) 这个方法是在用户拒绝权限后返回true。也就是说:用户第一次点击一个需要权限的地方,该方法返回false(因为用户没拒绝~),当用户拒绝掉该权限,下次点击此权限处,该方法会返回true。可在里面进行对该权限的说明,然后弹出权限让用户选择,并且对话框有don't ask again选项:
用户选择don't ask agian后
ActivityCompat.shouldShowRequestPermissionRationale(activity,permission) 方法一直返回false,并且 ActivityCompat.requestPermissions 不会弹出对话框,系统直接deny,并回调 onRequestPermissionsResult 方法:
用户拒绝权限演示
用户接受权限演示
补充
android权限有 normal 和 dangerous 两种,normal权限系统会自动赋予给应用程序,dangerous 权限则需要进行运行时权限处理。访问下面网址查看所有的dangerous权限:
https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous
另外,用户还可以随时手动对运行时权限进行开关,如下图所示:
最新文章
- QDialog QMainwindow QWidget QFrame不同时候用法.
- 生成Kindle可读的mobi和PDF电子书
- GTD工具 Wunderlist使用心得总结
- required string parameter XXX is not present
- 最简单jquery轮播图效果
- Python 中的map和reduce学习笔记
- [Effective JavaScript 笔记]第21条:使用apply方法通过不同数量的参数调用函数
- ios开发 数据库版本迁移手动更新迭代和自动更新迭代
- maven依赖传递关系
- java生成指定范围的随机数
- hdu 2777(线段树)
- 201521123121 《Java程序设计》第1周学习总结
- Flask 之东方不败一
- linux后台执行./run.py提示python syntax error near unexpected token `('
- 【转】Python中的运算符
- JAVA学习资源整理
- 5.css背景以及书写位置
- .NET操作Excel笔记
- IOS-网络(ASI使用)
- 多线程中sleep和wait的区别,以及多线程的实现方式及原因,定时器--Timer
热门文章
- Spring系列: 使用aop报错:nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle
- Logparser 的用法
- Xilinx命名规则
- 从走出校门到Java实习生生活
- php 接收表单 方法的区别
- Android图片浏览器之图片删除
- asp.net 预编译和动态编译
- javascript继承(三)—继承的实现原理
- ThreadLocal模式的核心元素
- Red Hat Linux9命令行--修改补充中