一,写在前面
在sdk23以前,用户安装应用时必须同意开发者添加的所有权限,否则应用无法安装成功。对于开发者来说,只需要在清单文件里添加功能模块需要的权限,非常方便。对于用户来说,却是灾难性的,数据隐私完全暴露在应用面前。
于是,Google的Android团队在6.0版本推出了运行时权限系统,部分有关用户隐私的权限被划分为危险权限。对于开发者来说,普通权限的添加与以前并无两样,但危险权限不仅需要在清单文件中配置,还需要添加Java代码弹出对话框向用户请求权限。由于系统对动态权限已封装完善,咱们只需要调用新的API向用户请求权限即可,对话框也是系统提供,无需也不能自定义UI。
本篇文章将会先介绍动态权限相关的四个方法,然后介绍如何使用这四个方法向用户申请动态权限。弹出权限请求的对话框后,用户可以同意权限,拒绝权限,拒绝权限并不再提示,APP要根据自己的业务需求,去处理用户的三种界面交互。在诸多应用中,腾讯公司的“微信”是一款用户体验较好的产品。因此,本篇文章会以微信的“扫一扫”功能需要的相机权限为例,模仿其界面交互的逻辑。
二,危险权限
关于危险权限的介绍,详细见官方文档。危险权限中有10个权限组,权限组在类Manifest的内部类permission_group中定义,详情见官方文档。每个权限组中包含几个权限,权限在类Manifest的内部类permission中定义,详情见官方文档;
危险权限,如下所示:
三,API介绍
检查应用是否拥有某一权限permission
ContextCompat类中:
public static int checkSelfPermission(@NonNull Context context,
@NonNull String permission)
permission:权限对应的字符串,在Manifest.permission中定义
eg