详解Android6.0运行时权限管理
2024-02-14 23:01:58发布 浏览442次 信息编号:97272
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
详解Android6.0运行时权限管理
自.0发布以来,权限方面发生了很大的变化。 不再是只要设置了就可以随意获取权限,而是更加注重用户的隐私和体验,不再强迫用户拒绝权限。 如果您因所拥有的权限而无法安装,您将无法在未请求用户授权的情况下任意访问用户隐私,并且即使授权后您也可以及时更改权限。 这是6.0版本更加支持和关注用户的一大体现。
1. 认知
今天我们来学习一下.0权限管理。
.0系统将权限分为两个级别:
一类是普通权限,不会潜在侵犯用户隐私和安全,例如网络访问权限、WIFI访问权限等;
另一类是危险权限,会直接威胁用户的安全和隐私问题,例如短信、相册等的访问权限。
那么常见权限和危险权限有哪些呢? 以下是它们的分类,供您使用时参考。
1.(普通权限)
使用上述权限不会威胁用户安全,因此此类权限可以直接在内部使用,安装后直接生效。
2.(危险权限)
SMS(短信)
(存储卡)
(联络人)
电话(手机)
(日历)
(相机)
(地点)
(传感器)
(麦克风)
危险权限和普通权限也有区别。 普通权限是单个权限,危险权限是分组显示。 也就是说,当您接受危险权限时,您不仅接受了界面上显示的权限,还接受了界面上显示的权限。 它所在组中的所有其他访问权限也将自动授予权限。 例如,一旦授权,App也会拥有 和 的权限。
值得注意的是,此类权限也是需要注册的。
好吧,光说不练不是我们的风格。 我写的东西是根据我遇到的问题,然后认真研究后记录下来的。 一方面我想巩固自己的知识,另一方面我也希望帮助别人提供一些解决方案。
2.实战
实战部分分为几种情况,因为根据我们的目标SDK版本和真机版本的差异,会有不同的场景。 常用权限大家都很熟悉,我们就不介绍了。 下面将一一介绍危险权限的使用场景:
在介绍使用场景之前,先看一下我的开发和真机版本。
这里我们以阅读短信为例,讲解一下整个权限的使用:
1. 无访问权限:
首先我们来设计一下布局,如下:
看代码,很简单,直接读取短信即可:
然后,点击界面上的“阅读收件箱中的短信”。 相信大家都会知道发生了什么。 果不其然,程序直接崩溃了,日志记录如下:
日志明确告诉我们这个异常是因为权限不足导致的,所以我们就给它读取短信的权限看看吧。
2. 新增权限:
添加了阅读短信的权限后,您应该很高兴地等待我们的界面上会出现多少条短信。 然而,事实却令人非常失望:
再次出现无权限异常。 为什么?
我们这里先不解决这个问题。 我们首先想象一个实际情况。 如果你现有的很多应用程序都使用了危险权限,有时候你并不完全知道它们被用在哪里,但你的目标版本是像我的版本,它指向6.0,并且有可能用户的手机是6.0或以上版本,所以这个时候你的APP中可能会出现这个情况,所以在你找出哪里使用了危险权限之前,我应该如何解决这个问题?
那么你可以这样解决:
修改构建中的目标版本号:
那么手机版本还是6.0以上,我们来看看结果:
没关系,哈哈,你很高兴,确实没关系。
这么聪明,你可能已经意识到了什么。 是的,根据版本23,也就是.0位分割线,我们可以得出一个小结论:
当>=23,且真机版本>=23时,即使添加了相应的危险权限,如果没有做相应的处理(后面会讲如何处理),有时也会出现权限限制异常。 此危险权限此时不起作用,但仍必须声明。
当<23,且真机版本>=23时,我们没有做任何相关处理,就得到了想要的访问权限,这说明申请的危险权限已经起作用了。
我们再来看另一种情况,就是如果我的手机比较旧,没有更新6.0系统,这种情况会出现什么情况呢?
这次我们使用模拟器版本4.4.4
目标是21。让我们看看结果:
这也是有可能的。 0 是因为我的模拟机上没有短信。 这个数字与我们无关。 如果是23,我们看一下结果:
显然我们又得到了正确的结果。
由此我们还得到了一个小结论:
当我们的真机系统版本<23时,无论我们的值是否大于23,都不会影响我们里面申请的权限。 也就是说,此时真机系统版本起到了主导作用。
从上面的结论我们应该清楚的知道访问权限在真实手机中是如何使用的。 然而我们的手机正在升级,版本会越来越高。 所以我们现在的应用不可能一直只支持低端手机。 版本的使用不考虑更高版本。 因此,APP权限升级是现在的必然趋势。
那么现在让我们回过头来解决上面剩下的问题。 真机和目标版本均大于6.0时出现权限异常该如何解决?
主要分为三步:
1:检查是否有权限
2:如果没有权限,则申请权限
3:处理权限回调
让我们分别看一下这些步骤。
1:检查是否有权限
要检查您是否已经拥有权限,可以使用 .( , );
该方法中有两个参数,即上下文和请求的权限。
如果您有权限,请让它直接读取短信信息。 如果您没有权限,请申请。
2:申请许可
要申请许可,请使用:
void (最终, 最终[], 最终 int) {}
该方法需要三个参数。 当前申请的权限可以是多个,最后一个是请求码。 既然有请求码,就意味着会有回调,也就是我们下面要讲的处理回调。
3:处理权限回调
要处理权限回调,您需要重写以下方法:
然后在该方法内部判断用户是否对该权限组进行了授权或者拒绝授权。 如果授权,获取短信信息。 否则我这里只是显示一个toast提示框。
这里再说一遍,只要其中一个权限组被授权,其他权限也会有权限。 这就是为什么 [0] == 。 是直接使用的。
ok,下面是具体的界面显示:
我们可以看到,当我们第一次点击阅读短信时,它会首先检查应用程序是否有权限。 如果没有,它将适用。 这里对应的界面是显示授权对话框。 第一次我们选择拒绝授权,然后在回调中,打印了我们的一个toast消失了,提醒我们授权被拒绝,但是当我们需要再次读取短信的时候,它也会申请授权,然后我们允许授权。 然后我们看到显示屏上显示了短信的数量。 (这里的0消息是因为你使用的模拟器没有短信,这不是重点。)
值得提醒的是,当我们第一次选择拒绝授权时,当我们再次点击阅读短信时,授权对话框中会额外出现“不要再提醒我”的提示。 当我们拒绝授权并选择没有提醒时会发生什么? 请看演示:
如果您多次拒绝并选择不提醒,那么您下次阅读时将不会再申请授权。 相反,您将直接在回调中声明用户已拒绝授权。
那么如果用户因为某种原因必须授权应用程序该怎么办呢? 其实很简单。 在回调中,提醒用户去“设置”手动授权应用,或者发送广播打开设置界面等。不管怎样,和我显示的“权限被拒绝”的提醒基本是一样的。 只需要稍微优化一下即可。 这里就不演示了。
其实到这里我们就差不多讲完了,不过有一个方法我们可以暂时放下,就是这个方法默认返回false,但是当用户上次拒绝了这个权限申请,需要再去申请该权限的时候再次,它会返回true,这意味着你已经拒绝过一次,并且会弹出另一个授权框。 你需要给我一个解释,为什么需要授权,也就是说,解释一下如何多次授权这个权限,让用户知道为什么需要授权。 只有这样,他才能完成他的手术。
下面,我们来看看它的用途:
我这里只是简单的弹出一个对话框解释为什么使用这个权限,然后再次调用申请的权限方法。 您可以将其与回调方法封装在一起,以便更好的应用。
看一下下面的界面操作:
到这里我基本上就讲完了。 我只讲了申请单一许可。 也可以进行多种应用。 你可以自己尝试一下。 基本上是相同的操作。 此外,我们可能需要在一个应用程序中获得多个许可。 经常会使用危险的权限,这导致我们需要多次重写相同的代码,非常不方便。 所以网上有很多关于权限框架的开源代码,大家可以自行使用。
好的,就是这样。 希望你能学到一些知识,多自己实践。 祝大家生活愉快。
以上就是本文的全部内容。 希望本文的内容能够给大家的学习或者工作带来一些帮助。 我也希望支持脚本之家!
提醒:请联系我时一定说明是从星空网上看到的!