简述
Android 6.0 完善了应用的权限系统,权限的申请变成了由用户触发。开发者不得不在需要使用 权限 时,再调用申明权限方法。Aop(面向切面编程)的思想,就和权限申明十分契合。所以,本库使用Aop进行权限处理,让Android权限处理变得更加简洁明了。
说明
不会强强制引入 Androidx 及 AndroidSupport 包。
Tips: 本库有什么BUG欢迎提交 issue 和 反馈。
项目地址
https://github.com/aoomeo/Android_Aop_Authority
快速集成
首先,感谢 aspectjx,本库依赖 aspectjx 使用。
- 需要在 项目的根目录 里添加:
dependencies {
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
}
- 需要在 app 的 build.gradle 中添加
apply plugin: 'android-aspectjx'
- 最后集成 本库
implementation 'com.aoomeo.android:permissionaop:0.0.4'
参数说明
RequirePermission
param | type | default | description |
---|---|---|---|
permissions | String[] | none | 申明的权限数组 |
negativeText | String | "取消" | AlertDialog中的negativeButton's Text |
negativeTextColor | String | "" | AlertDialog中的negativeButton's TextColor,TextUtils.isEmpty()检测 |
positiveText | String | "去设置" | AlertDialog中的positiveButton's Text |
positiveTextColor | String | "" | AlertDialog中的positiveButton's TextColor,TextUtils.isEmpty()检测 |
title | String | "提示" | AlertDialog中的标题 |
tips | String[] | "当前操作缺少必要的权限。\n请点击"设置"-"权限"打开所需权限。" | 提示,支持数组,使用StringBuilder.append |
在需要权限的方法前,加上
@RequirePermission(permissions = [Manifest.permission.ACCESS_FINE_LOCATION])
如需处理拒绝回调,及设置页面返回拒绝回调,实现IPermissionRefuseListener
即可
IPermissionRefuseListener
function | return | params | description |
---|---|---|---|
permissionRefused | void | void | 用户拒绝权限回调 |
permissionForbidden | boolean | void | 用户勾选不再提醒后的回调处理,return true:自定义处理;return fasle,默认弹窗 |
permissionRefusedBySetting | void | void | 用户跳到设置页后的回调 |
IPermissionRefuseListener.permissionForbidden()
用户自定义处理:勾选不再提醒后的情况,给出的一丁点建议。
//弹窗 --> 希望用户去设置页给予权限。下面是跳转设置的方法
private void startAppSettings(Activity activity) {
Intent intent;
try {
intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + activity.getPackageName()));
activity.startActivityForResult(intent, REQUEST_SETTING_CALL_BACK_CODE);
} catch (ActivityNotFoundException e) {
intent = new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
activity.startActivityForResult(intent, REQUEST_SETTING_CALL_BACK_CODE);
}
}
//弹窗 --> 用户点击取消按钮
//调用已实现的IPermissionRefuseListener.permissionRefused()
混淆须知
因为使用了反射来处理权限,所以对于一些源生类(Fragment & ActivityCompat)需要全部保留。
-keep class androidx.fragment.app.Fragment {*;}
-keep class android.app.Fragment {*;}
-keep class android.support.v4.app.Fragment {*;}
-keep class android.support.v4.app.ActivityCompat {*;}
-keep class androidx.core.app.ActivityCompat{*;}
-keepclassmembers class * {
@com.aoomeo.android.permissionaop.RequirePermission <methods>;
}
网友评论