Android M动态获取权限示例
来源:互联网 发布:数据存储 编辑:程序博客网 时间:2024/06/07 05:00
Android M推出了不少新功能,其中我比较关注的是新的权限机制,应用的权限不再是在应用安装时一次性赋予,而是需要在运行时询问用户,经过同意之后才能使用对应的权限.
希望这样的生态能够改善android app乱要权限的现状,进而改进android生态.
扯远了, 事实上本文仅就应用中如何实现动态获取权限给出一个简单示例,参考的是Google提供的相关sample
首先给出效果图
区别在申请超过一项权限时,左下角会有显示权限数量,对话框依次显示.
实现以上功能, 需要以下几个步骤
- 注册权限: 在AndroidManifest.xml中,添加需要动态申请的权限,和之前不同的是多了-sdk-m,代表仅对SDK版本高于M的才有用,在较低系统版本的机器上运行时,app是无法获得这两项权限的.
<span style="white-space:pre"></span> <uses-permission<span style="color:#ff6666;">-</span><span style="color:#ff0000;">sdk-m</span> android:name="android.permission.READ_CONTACTS" /> <uses-permission<span style="color:#ff0000;">-sdk-m</span> android:name="android.permission.CAMERA" />
2. 校验/申请权限: 在代码中需要用到权限前,先判断是否具有该权限,如果尚未被赋予该权限,则需要进行申请,
private void onClickShowContact() { if (<span style="color:#ff0000;">hasPermission</span>(Manifest.permission.READ_CONTACTS)) { showContact(); } else { <span style="color:#ff0000;">requestPermissions</span>(new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_CONTACTS); } } private boolean hasPermission(String permission) { if (!Build.VERSION.CODENAME.equals("MNC")) {//如果设备的系统不是android M预览版 return true; } return checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED; }requestPermissions是Activity.class中的方法,
第一个参数是想要申请的权限,数组类型,可以一次性传多个权限,让用户线性地进行授权.
第二个是request代号,类似startActivityResult时传的requestCode,主要用于在回调时进行区分.
调用后,就会显示出上面那样的授权界面.
3. 处理权限赋予结果的回调:
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case REQUEST_CONTACTS: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { showContact(); } break; default: break; } }
这里的处理也和onActivityResult的处理非常相似,根据requestCode判断请求的权限类型. permissions和grantResult是一一对应的,当用户对某一权限同意授权后,对应index的grantResults中的元素的值即为PackageManager.PERMISSION_GRANTED.
可以看出动态获取权限还是非常简单的,只是一个应用要在权限使用上适配到完全兼容M,需要修改的地方可能会比较多.
另外,展示给用户看的权限粒度并没有很细,目前只是大致地分为几大类,不至于让用户太困惑.
最后再贴几张与Android M中与权限相关的截图.
权限类型
针对某项权限,对申请了该项权限的应用进行重新配置
针对某项应用,对其权限进行重新配置
应用高级选项
- Android M动态获取权限示例
- Android M 动态权限获取
- Android M 动态权限获取
- Android M 动态权限获取
- Android M 动态权限获取
- android 6.0 权限动态获取示例
- Android M动态申请获取权限android.permission.READ_PHONE_STATE
- Android M动态申请获取权限android.permission.READ_PHONE_STATE
- android M 动态申请权限
- Android M动态权限管理
- Android动态获取权限
- Android 动态获取权限
- Android动态获取权限
- android 动态权限获取
- Android动态获取权限
- Android M 的动态权限解决方案
- Android动态权限获取总结
- android 6.0 动态权限获取
- App被拒绝原因及解决方案(不定时更新)
- Spring管理iBatis事务
- 技术菜鸟通向技术帝成长之路(一)静态网站
- Linux 技巧:重定向 stderr 和 stdout 输出到 gdb 窗口
- IBM Rational System Architect 许可证问题处理
- Android M动态获取权限示例
- 控件包含代码块(即 <% ... %>),因此无法修改控件集合(用户自定义控件中)
- springmvc使用JSR-303进行校验
- plsql找不到数据库解决方法
- Redis 学习笔记三 Ubuntu下的安装
- 开始养成记日记的习惯
- Android按两次返回键退出程序和长按返回键退出程序
- oracle口令失效
- c++运行时类型识别(rtti)