Android M权限动态获取

最近整理了一个Android 6.0以上的权限获取工具,要用到就直接复制粘贴好了

直接看代码

用法

采用Glide的Fragment依附思想,无需继承Activity,傻瓜式调用,传入权限的String参数为可变长度型,支持2种模式

  • 普通的Callback回调
  • 通过RxJava2生成事件流

Callback用法:

//PermissionManager在action包下
PermissionManager.with(this)
                 .request(new PermissionManager.Callback() {
                        @Override
                        public void call(PermissionResult result) {
                            process(result);
                        }
                    }, Manifest.permission.WRITE_EXTERNAL_STORAGE);

RxJava2用法

//PermissionManager在rx包下
PermissionManager.with(this)
        .request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
        .subscribe(new Consumer() {
            @Override
            public void accept(@NonNull PermissionResult permissionResult) throws Exception {
                process(permissionResult);
            }
        });

返回的权限结果处理实例:

private void process(PermissionResult permissionResult) {
    if (permissionResult.isSuccessful()) {
        Toast.makeText(getApplicationContext(), "成功GET√", Toast.LENGTH_SHORT).show();
        return;
    }
    if (permissionResult.isDisable()) {
        //用户傲娇的勾选了不再提示,并且拒绝了权限
        Toast.makeText(getApplicationContext(), "权限被禁用啦,请手动开启权限", Toast.LENGTH_SHORT).show();
        PermissionManager.toSetting(MainActivity.this);
    } else {
        //用户拒绝了权限
        Toast.makeText(getApplicationContext(), "宝宝摔倒了,要开启权限才能爬起来~~~", Toast.LENGTH_SHORT).show();
    }

}

Ps:request方法用@TargetApi修饰,API23以下不执行

效果

最后附上一些6.0以上的危险权限(默认不开启)

Android M权限动态获取_第1张图片
危险权限

9个大类分别是

  • 读写日历
  • 相机
  • 通讯录的读写
  • 位置
  • 麦克风
  • 通话相关
  • 传感器
  • 短信相关
  • 手机存储

其中在6.0以上,在对应分组下只要有一条权限被授权,当前分组下的所有权限都被授权

点击获取代码

你可能感兴趣的:(Android M权限动态获取)