Android 6.0动态获取权限

三世轮回 提交于 2021-02-11 12:56:42

点上方蓝字关注「极客猴」

每周学点技术,充实自己

0x00 背景

Android系统的市场占有率不断攀升,智能手机的全面普及。这也给恶意软件、木马程序滋生提供了丰富营养。这些恶意软件、木马程序会对用户的敏感数据进行读写操作,用户的隐私收到威胁。谷歌为手机用户真是煞费苦心,在Android 6.0系统新增动态获取权限功能,目的是更好保护用户的隐私。

0x01 哪些权限需要申请

Android目前所有权限大可分为两种,一种是普通权限,另一种则是危险权限。普通权限指的是不会直接威胁到用户的安全和隐私的权限,这些权限的申请,系统会自动帮我们申请。危险权限则是可能会对用户的隐私以及设备的安全性造成威胁的权限。这些权限例如获取联系人信息、获取设备的地理位置、打开摄像头等。对于这危险权限,在Android 6.0之后必须由用户自行判断管理。如果用户授权,应用程序才会具有这相应的功能。

下图为危险权限列表,一共9组24个权限。 
需要注意的一点: 如果权限组中有个权限得到用户的授权,那么该权限所在组中所有其他权限也会同时被授权。

0x02 实现

我自己基于samples-23_r02\system\RuntimePermissions\实例代码,写出了一个demo。demo是功能是动态获取摄像头权限,如果用户同意授权,则获取摄像头预览画面。 
1)在AndroidMesifest.xml文件中添加摄像头权限 


2)使用ActivityCompat.checkPermission()进行判断需要用到的权限是否已经经过用户授权这个方法第一个参数是上下文,第二个参数是具体的权限名。 

代码可以这样写: 

我在demo里面已经把权限抽取出来,封装在一个工具内中。 
在MainActivity中,判断权限: 

在PermissionUtil中,具体实现: 

3)如果没有获得权限,就需要调用ActivityCompat.requestPermissions()方法进行申请权限,并且实现onRequestPermissionsResult()方法。 
requestPermissions()一共有3个参数,第1个参数是Activity的实例,第2个参数是一个String数组,第2个参数是请求码,可以自己自行定义,只要确保是唯一值即可。 

在demo中,我为了能够兼容一次申请多个权限,自己实现代码如下: 

onRequestPermissionsResult()方法的具体实现: 

0x03 注意项

小米手机在第一个弹出提示用户授权对话框之后,无论用户点击同意还是拒绝,下次启动都没有再次弹出对话框。所以只能引导用户进入权限管理进行修改权限。


小贴士     

因微信不支持站内链接, 请点击【阅读原文】阅读完整的代码


作者:猴哥,公众号:极客猴。爱好读书,喜欢钻研技术,梦想成为文艺青年的IT Boy。

 - END -


极客猴  分享技术的极客
长按,识别二维码,加关注



点击“阅读原文”

本文分享自微信公众号 - 极客猴(Geek_monkey)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!