最近在学APT就顺手写了个权限申请库,使用起来非常方便。
首先是引入库,在gradle中直接配置如下:
kotlin项目
implementation 'com.rain.permission:rainknife:1.2.1'
kapt 'com.rain.permission:permission-compile:1.2.0'
java项目
implementation 'com.rain.permission:rainknife:1.2.1'
annotationProcessor 'com.rain.permission:permission-compile:1.2.0'
然后是给需要申请权限的activity或者fragment添加RuntimePermissions注解,如下:
在onCreate()中绑定操作 RainKnife.bind(this)。
然后定义三个方法,分别添加PermissionRequest、PermissionDenied、PermissionNeverAsk注解,value则是申请权限时的requestCode,这三个方法分别处理权限通过、权限被拒绝、权限被拒绝并且选择了不再提示的操作。
接下来托管点击事件,
camera.setOnClickListener{
MainActivityPermissionExpand.doSomethingWithCheckPermission(
this, arrayOf(Manifest.permission.CAMERA),
PERMISSION_CAMERA
){
showCamera()
}
}
在每个绑定了RuntimePermissions注解的类build后都会生成对应的类名+PermissionExpand类,直接调用doSomethingWithCheckPermission方法即可,需要传入当前的activity,申请的权限组,requestCode和一个回调即可。
最后托管onRequestPermissionResult方法传入当前的activity和onRequestPermissionsResult中的requestCode、permissions、grantResults即可
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
MainActivityPermissionExpand.requestPermissionResult(this, permissions, requestCode, grantResults.toList()
)
}
使用这个库后省去了繁琐复杂的权限申请判断相关的逻辑操作,代码整洁易于维护。
混淆设置 -keep class com.rain.permission.** {*;}