前言
permissions4m最初的设计是仅仅做成一个编译器注解框架,在1.0.0版本时,它纯粹地实现了原生 Android 请求流程,但是当投入笔者自己项目中使用的时候,笔者发现国产手机又许多适配缺陷,例如:
- ActivityCompat.shouldShowRequestPermissionRationale(Activity,String)
- 明明用户点击拒绝授权,却回调的是权限申请成功方法
- 只能有一次权限是否授予选择,拒绝后就无法再有提示
permissions4m 简介
简介中只是节选了部分内容,更详细完整的请移至项目:https://github.com/jokermonn/permissions4m。
引入依赖
Gradle 依赖
project 中的 build.gradle
buildscript {
// ...
}
allprojects {
repositories {
// 请添加如下一行
maven { url 'https://jitpack.io' }
}
}
app 中的 build.gradle:
dependencies {
compile 'com.github.jokermonn:permissions4m:2.0.0-lib'
annotationProcessor 'com.github.jokermonn:permissions4m:2.0.0-processor'
}
注解回调
在需要权限申请的地方调用
Permissions4M.get(MainActivity.this)
// 是否强制弹出权限申请对话框,建议为 true
.requestForce(true)
// 权限
.requestPermission(Manifest.permission.RECORD_AUDIO)
// 权限码
.requestCode(AUDIO_CODE)
// 如果需要使用 @PermissionNonRationale 注解的话,建议添加如下一行
// 返回的 intent 是跳转至**系统设置页面**
// .requestPageType(Permissions4M.PageType.MANAGER_PAGE)
// 返回的 intent 是跳转至**手机管家页面**
// .requestPageType(Permissions4M.PageType.ANDROID_SETTING_PAGE)
.request();
如:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Permissions4M.get(MainActivity.this)
.requestForce(true)
.requestPageType(Permissions4M.PageType.MANAGER_PAGE)
.requestPermission(Manifest.permission.RECORD_AUDIO)
.requestCode(AUDIO_CODE)
.request();
}
});
然后将会回调相应的
@PermissionsGranted @PermissionsDenied @PermissionsRationale/@PermissionsCustomRationale、@PermissionsNonRationale 所修饰的方法