Android运行时权限策略和easyPermission的使用分析

    Android运行时(runtime)权限是6.0引入的概念,与之相对应的是install-time策略。runtime权限继承了install-time的部分特性,对于普通权限申请依然使用install-time 策略,但是对于dangerous级别的权限,就会使用runtime策略来处理。

   因此,一个权限的申请和授予是分成两个阶段来看的。

一个App执行何种权限策略,总结起来一句话:

    对于App targeSdk>=23且运行的Android版本(SDK_VER>=23)为6.0以上,则使用runtime权限策略处理,其余情况使用install-time权限。

runtime权限和install-time权限的区别和联系:

    1. 联系:runtime权限授予是从installtime权限演进而来的             

              (1) 所用到的权限,必须在AndroidManifest中显式申请

              (2) 对于Normal权限,都是安装即授予

    2. 区别:runtime权限主要对dangerous级别权限进行了进一步管控

              runtime权限策略,除了需要在AndroidManifest中显式申请,还需要开发者在代码中用到的地方加入显式的申请的逻辑。

Normal权限和dangerous权限:

      Normal permissions(正常权限):当app需要访问沙箱外对于用户隐私或其他app应用操作风险较小的数据和资源,所需要的权限,定义为Normal。

      Dangerous permassions(危险权限):当访问的数据或资源涉及用户私人信息或可能会影响用户的存储数据或其他应用程序的操作,此时为Dangerous权限

      Google对于Normal和Dangerous权限有自己的定义,用户也可以根据自己的需求,定义Normal和Dangerous权限。

      具体参考:https://developer.android.com/guide/topics/permissions/overview#normal-dangerous

runtime权限操作步骤:(参考官网 https://developer.android.com/training/permissions/requesting

    (1) 使用Android Support Libarary申请,可以做到前向兼容

    (2) AndroidManifest 添加所需权限 (这一步与installtime相同)

    (3) 判断是否有权限,使用ContextCompat.checkSelfPermission()

    (4) 没有权限申请权限,使用requestPermissions()手动申请;申请结果通过onRequestPermissionsResult()接口返回;          (easyPermission中将此接口处理成了三个返回接口,AfterPermissionGranted,onPermissionGranted和onPermissionDenied)

    (5) 判断是否需要给用户解释,shouldShowRequestPermissionRationale()(这个接口很有意思,它反映的是拒绝的情况,我们知道对于dangerous权限有系统默认拒绝,手动选择永久拒绝,手动选择暂时拒绝,这里返回true表示手动暂时拒绝,其余两种都是返回false)

使用Google的easyPermissions快速完成runtime权限申请:

       github的源地址:https://github.com/googlesamples/easypermissions

       Google为了runtime权限申请,专门写了一个库,可以供Andriod开发者快速完成runtime权限申请及后处理。但是了解其背后的处理逻辑,是很重要的。因此我花了一个权限申请的流程图,可供同学们参考,顺着流程图结合以上5个步骤,就能够更加深刻的明白runtime权限申请的背后逻辑了,也就可以放心大胆的使用easyPermissions了。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android中,运行时权限是指在应用程序运行过程中,用户需要对某些危险操作进行授权的权限。在 Android 6.0(即targetSdkVersion < 23)之前,应用程序被授予所有申请的权限。然而,在此之后,用户不需要在安装软件时一次性授权所有申请的权限,而是可以在软件的使用过程中再对某一项权限申请进行授权。这就是运行时权限的核心。Android将所有权限分为普通权限和危险权限两类。普通权限是系统自动帮我们授权的,我们只需在注册文件中声明即可。而危险权限必须经过用户手动点击授权才能使用。危险权限包括9组24个权限。 在程序运行时申请权限的过程中,我们需要首先在AndroidManifest.xml文件中声明所需要的权限。以申请打电话的运行时权限为例,可以在文件中添加如下代码: <uses-permission android:name="android.permission.CALL_PHONE"/> 需要注意的是,在Android 5.1(API 22)或更低版本,并且应用的targetSdkVersion是22或更低版本时,系统会在安装应用时要求用户授权权限。即使在安装时已经授予应用所有权限,在Android 6.0之后依然可以通过"Setting"来关闭已经授予的权限。在请求权限时,系统只告知用户应用需要的权限组,而不告知具体权限。因此,在未检查授权的情况下直接使用危险权限,会导致程序崩溃。为了解决这个问题,我们可以使用v4包中的ContextCompat来处理权限,这样不需要考虑版本问题。相关API包括checkSelfPermission()等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Android运行时权限](https://blog.csdn.net/Cristiano_san/article/details/119840235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Android 运行时权限终极总结](https://blog.csdn.net/LucasXu01/article/details/80860070)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值