Android 6.0动态获取权限

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)

原文发表时间:2016-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

纯干货--秒杀系统架构分析与实战

(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货

36940
来自专栏有趣的django

Flask构建微电影(一) 第一章、项目介绍第二章、环境搭建

26600
来自专栏西枫里博客

启用CDN后,QQ互联登录出现异常的问题。

博客群里的网友都说网站真实IP没隐藏有巨大的被D风险。隐藏网站真实IP最简单的办法就是做内容分发网络,用户在访问网站的时候是访问就近的CDN节点,ping出来的...

19620
来自专栏Java技术栈

到底什么是分布式系统?

分布式系统背景 说分布式系统必须要说集中式系统,集中式系统中整个项目就是一个独立的应用,整个应用也就是整个项目,所有的东西都在一个应用里面。 如下图所示 ?...

35190
来自专栏沃趣科技

沃趣科技火线救援某公安系统核心业务数据

求助电话 只剩下键盘敲打声的办公室,被一个突如其来的电话打破了宁静。电话那头,是某公安客户的紧急求助。 案发现场 其核心数据库,由于存储突然断电,导致数据库实例...

36470
来自专栏知识分享

6-51单片机WIFI学习(测试TCP服务器--使用串口调试助手--不连接路由器)

上一篇连接  http://www.cnblogs.com/yangfengwu/p/8757513.html 注意:更加详细的操作请参考, http://ww...

46140
来自专栏大宽宽的碎碎念

你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?

654100
来自专栏deed博客

权限何必那么高

19240
来自专栏IT技术精选文摘

Go语言构建千万级在线的高并发消息推送系统实践

44820
来自专栏张善友的专栏

从APM角度上看:NoSQL和关系数据库并无不同

Michael Kopp拥有十年以上C++、Java/JEE的架构及开发经验,现Compuware技术策略师,专攻大规模产品部署的架构和性能。 以下为译文: 传...

24680

扫码关注云+社区

领取腾讯云代金券