权限分为安全权限和危险权限,其相同点在于两者都在manifest中声明,不同点在于安全权限在app安装时会被系统自动授予,而危险权限(android6.0 之后)要在用户安装完成之后,在用户使用的时候由用户选择是否授予。
用户的选择有三种,同意,拒绝,附带一个不再询问。
a.同意的话就是权限被授予,不需进行要额外的工作。
b.拒绝的话就得额外做两件事:1、用UI告诉用户为什么要这个权限;2、再次向用户申请权限(即又是一个三个选择)。
c.不再询问分为 拒绝+不再询问 和 同意+不再询问,同意+不再询问 不需要做额外的工作,拒绝+不再询问就相当于永远拒绝了权限,要开启这个权限,只能提示用户去设置里面去开启该APP的对应的权限开关,或者重新安装app然后选择a中的同意。
在android6.0(api>23)之后
manifest中列出危险权限之外,要让用户授予对应权限需要以下流程。
1、检查权限(会弹出 允许/拒绝 对应权限的对话框 )
对于危险权限,每次使用都必须被要求询问。(比如昨天允许了相机权限,那么今天必须再次允许相机权限才能使用相机)
method:ContextCompat.checkSelfPermission()
2、解释权限.(若用户在1中拒绝,进入向用户解释为什么需要这个权限这个环节,随后进入环节3,如果同意直接进入3环节)
shouldShowRequestPermissionRationale().
3、请求权限(向用户请求权限,让用户选择允许/ju)
requestPermissions() ( 回调函数 onRequestPermissionsResult())
note:直接简单的请求权限 requestPermissions() 详见Github 地址 https://github.com/caltech-chen/PermissionDemo