Android6.0 以上权限处理(AOP)

作者: 钱小俊24岁了呢 | 来源:发表于2019-10-08 10:45 被阅读0次

    简述

    Android 6.0 完善了应用的权限系统,权限的申请变成了由用户触发。开发者不得不在需要使用 权限 时,再调用申明权限方法。Aop(面向切面编程)的思想,就和权限申明十分契合。所以,本库使用Aop进行权限处理,让Android权限处理变得更加简洁明了。

    说明

    不会强强制引入 AndroidxAndroidSupport 包。
    Tips: 本库有什么BUG欢迎提交 issue反馈

    项目地址

    https://github.com/aoomeo/Android_Aop_Authority

    快速集成

    首先,感谢 aspectjx,本库依赖 aspectjx 使用。

    • 需要在 项目的根目录 里添加:
    dependencies {
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
    }
    
    • 需要在 appbuild.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>;
    }
    

    相关文章

      网友评论

        本文标题:Android6.0 以上权限处理(AOP)

        本文链接:https://www.haomeiwen.com/subject/ftkmuctx.html