Android运行时机制问题解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18242391/article/details/82668192

概述


在Android6.0之前,用户申请的权限默认是全部同意的,有时候一个应用安装可能会申请很多不必要权限,这样无疑会让个人隐私变得容易泄露。在Android6.0之后,应用许可提示可以自己定义了,权限机制分为普通权限和危险权限,对于普通权限在清单中注册直接会同意,而对于危险权限需要用户在代码中手动申请,然后在回调中处理同意和不同意的结果。关于运行时权限的使用可以看这里,讲得还是很清楚的。

虽然在Android6.0时候增加了运行时权限机制对于用户来说是一个福音,但是对于开发者来说显然是一个噩梦,因为我们每次调用关于需要权限的api,都需要在这些方法前面加权限检查,否则你的app就会crash,这显然不是我们想要看到的,如果用原生的api就会处理每个页面的回调,有时候权限少的话可能还好,但是多了的话,就需要处理很多回调,这无疑会增加开发者的负担。

针对这种情况,于是总结了以下几种解决方案。

Android6.0之前版本的应对方案


Android6.0系统默认为targetSdkVersion小于23的应用授予了所申请的所有权限,所以如果你以前的App设置的targetSdkVersion小于23,在运行时也不会崩溃,于是可以将你app的targetSdkVersion设置低于23就不会奔溃,也不用提前检查权限。

Android6.0之后版本的应对方案


为了解决申请权限的回调地狱,于是出现了很多基于运行时权限的框架,它们可以简化整个申请权限的过程,变化的只是传进来的参数,而不用再去处理回调地狱,接下来就介绍下几种框架在运行时权限中的应用。

1.)PermissionsDispatcher 详细用法可以看github
2 .) RxPermission 它其实是结合RxJava来实现的,同时加了一个隐藏的fragment,将fragment和activity绑定,于是在fragment中去申请权限,从而简化在activity中的使用
3.) easypermissions

处理’不再询问’ 选项


如果用户选择了’不再询问’,那么每次我们需要访问该权限的API时都会失效,这显然不会带来好的用户体验,所以此时需要做的就是给用户一个友好的提示,这时候就需要使用ActivityCompat.shouldShowRequestPermissionRationale方法,这个方法用来帮助开发者向用户解释权限的情况。如果用户选择了’不再询问’选项,则shouldShowRequestPermissionRationale方法会返回false,这时候我们就可以弹出AlertDialog来提醒用户允许访问该权限的重要性。

参考


1.Android 6.0 运行时权限处理完全解析

2.目前最流行的运行时权限请求框架PermissionsDispatcher、RxPermissions和easypermissions的使用和对比

3 . Android进阶之光

猜你喜欢

转载自blog.csdn.net/qq_18242391/article/details/82668192
今日推荐