Android 6.0权限申请框架

2018-12-31  本文已影响0人  Thor_果冻

MyPermission

Android 6.0权限申请框架

最新版本请查看GitHub

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
    compile 'com.github.Thor-jelly:MyPermission:v1.0.1'
}

Android 6.0权限申请框架搭建

有不足之处请联系745661590@qq.com
反射加注解的方式
仿PermissionsDispatcher一个好用的权限请求框架
代码中注释很全了

方法

方法名 描述
with 传入当前界面对象
setRequestCode 设置请求码
setRequestPermission 设置请求权限
requestPermission 请求权限

使用样例

可以直接查看代码中的样例

第一步,在需要请求权限的地方写请求权限代码

    MyPermission.with(this)
                .setRequestCode(REQUEST_PERMISSION_CODE)
                .setRequestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.CALL_PHONE,
                        Manifest.permission.SEND_SMS)
                .requestPermission();

第二步,通过注解方式写出 权限赋予成功,失败,don't ask again 这三种情况方法

 @PermissionSuccess(requestCode = REQUEST_PERMISSION_CODE)
    private void callPhoneSuccess() {
        //打电话方法
        Log.d(TAG, "callPhone: 打电话1PermissionSuccess");
    }

    @PermissionFailure(requestCode = REQUEST_PERMISSION_CODE)
    private void callPhoneFailure() {
        //打电话方法
        Log.d(TAG, "callPhone: 打电话2PermissionFailure");
    }

    //反射会返回don't ask Again 的权限
    @PermissionNotAskAgain(requestCode = REQUEST_PERMISSION_CODE)
    private void callPhoneNotAskAgin(List<String> notAskAgainList) {
        //打电话方法
        Log.d(TAG, "callPhone: 打电话3PermissionNotAskAgain");
        if (notAskAgainList != null) {
            for (String s : notAskAgainList) {
                Log.d(TAG, "callPhoneNotAskAgin: "+ s);
            }
            //调用写好的don't ask Again权限的弹窗,如果同意则跳转到权限界面,不同意则调用 失败方法。
            MyPermission.showDialogTipUserGoToAppSettting(this, REQUEST_PERMISSION_CODE, notAskAgainList);
        }
    }

最后一步,重写onRequestPermissionsResult方法,并添加MyPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);一句话

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        MyPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
    }

注解的一些小常识

java中元注解有四个: @Retention @Target @Document @Inherited
注解作用:注解就是在反射的时候做一个标记

注解名 描述
@Retention 注解的保留位置
@Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME) 注解会在class字节码文件中存在,在运行时可以通过反射获取到
----- -----
@Target 注解的作用目标
@Target(ElementType.TYPE) 接口、类、枚举、注解
@Target(ElementType.FIELD) 字段、枚举的常量
@Target(ElementType.METHOD) 方法
@Target(ElementType.PARAMETER) 方法参数
@Target(ElementType.CONSTRUCTOR) 构造函数
@Target(ElementType.LOCAL_VARIABLE) 局部变量
@Target(ElementType.ANNOTATION_TYPE) 注解
@Target(ElementType.PACKAGE)
----- -----
@Document 说明该注解将被包含在javadoc中
----- -----
@Inherited 说明子类可以继承父类中的该注解
上一篇 下一篇

猜你喜欢

热点阅读