Skip to content

RyensX/PermissionAnnotationDemo

Repository files navigation

PermissionAnnotation

  • AOP框架实现
  • 完全注解使用

引入

注意,PermissionAnnotation只能在AS上使用(因为用了AOP框架)

先在根目录build.gradle的dependencies里添加

dependencies {
        ...
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
}

Sync一下,然后在app的build.gradle顶部加上

apply plugin: 'android-aspectjx'

最后在下方dependencies里加上

dependencies {
        ...
        implementation ('com.su:PermissionAnnotation:1.0.4')
}

使用

PermissionAnnotation目前有三种注解,分别是

@Permission
@APermission
@PermissionDenial

@Permission和@APermission

@Permission@APermission都是申请权限的注解,不同的地方在于

@Permission 
//注解的方法可以有返回值,但无论申请成功与否都会执行

@APermission 
//注解的方法不可有返回值,但它可以根据申请情况决定是否调用,也就是只有成功申请到权限才会成功调用

两个注解均支持同时申请多个权限,且支持指定requestCode。具体属性值如下

属性 类型 说明 默认值
value String[] 存放权限 无,必须指定
requsetCode int 申请权限时的请求码 100/200
denialMsg String 默认拒绝提示显示的msg DEFAULT_MSG

在需要申请权限的方法头上加@Permission@APermission即可在被调用时申请权限,如

//支持申请ROOT权限,权限值是PermissionUtils.ROOT_PERMISSION。若是权限组中有ROOT则ROOT会被优先向系统申请
@Permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
    private int testMethod0(int t) {
        Log.d("测试", "testMethod0" + t);
        return t;
    }

@Permissions(value = Manifest.permission.WRITE_EXTERNAL_STORAGE, denialMsg = "测试msg")
    public int testMethod(int t) {
        Log.d("测试", "testMethod" + t);
        return t;
    }

@APermissions(value = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE}, requestCode = 111)
    private void testMethod2(int t) {
        Log.d("测试", "testMethod2" + t);
    }

@PermissionDenial

@PermissionDenial是权限拒绝回调注解。被@PermissionDenia注解的方法会在被用户拒绝授予权限时执行(若勾选了不再提示则不会调用),如

@PermissionDenial(requestCode = 111)
    private void testMethod2Denial() {
        Toast.makeText(this, "testMethod2方法申请权限被拒绝的回调方法", Toast.LENGTH_SHORT).show();
    }

该注解必须指定requsetCode且不能为默认值100/200&&应该>0以和对应的权限申请操作绑定

默认拒绝回调

若在使用@Permission@APermission时不指定requsetCode则会走默认提供的拒绝提示

    //默认权限说明
    public static void showDefaultMsg(Context context, String msg) {
        AlertDialog alertDialog = new AlertDialog.Builder(context)
                .setTitle("权限说明")
                .setMessage(msg)
                .setNegativeButton("了解", null)
                .create();
        alertDialog.show();
    }

其中msg就是具体说明,如果在使用申请权限的注解时不指定denialMsg则显示默认值DEFAULT_MSG

基本情况就是这样了,欢迎star

其他

使用的AOP框架

About

AOP方式实现的(动态)权限注解库

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages