美文网首页
Android 6.0权限申请框架

Android 6.0权限申请框架

作者: Thor_果冻 | 来源:发表于2018-12-31 13:00 被阅读0次

    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 说明子类可以继承父类中的该注解

    相关文章

      网友评论

          本文标题:Android 6.0权限申请框架

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