背景描述
随着Android系统的不断升级,谷歌对用户的隐私是越来越注重了,给我们开发者带来了更多的繁琐。Android6.0增加了动态权限申请,虽然不难,但是实现起来会很繁琐,代码量会很多,通常都是在需要申请的地方调用ContextCompat.checkSelfPermission(context, permission)
判断是否已经有了需要的权限,如果没有,则需要调用ActivityCompat.requestPermissions(activity, permissions, mRequestCode)
进行申请,最后需要在onRequestPermissionsResult
回调中对requestCode
和每一个权限对应的result
进行int
型的判断,一整个过程下来非常繁琐。这对于永远追求简单简洁的程序员来说是不可忍受的,所有将整个过程封装一下,目标是尽可能的使使用变得更简单。
实现逻辑
- 先看项目结构
把申请权限的整个流程都封装到
PermissionHelper
类中,对外只提供一个使用方法runOnPermissionGranted(Activity activity, Runnable actionOnGranted, Runnable actionOnDenied, String... permissions)
把需要申请的权限列表、申请成功和失败的回调等传入方法中,先判断是否已经允许了这些权限,如果没有,则申请权限,申请结果将会回调到Activity中的onRequestPermissionsResult方法,所以需要用户手动重写onRequestPermissionsResult方法,写入一行固定的代码即可(看后面的使用方法)。
public