当前位置: 代码迷 >> 综合 >> android6.0权限适配RxPermissions
  详细解决方案

android6.0权限适配RxPermissions

热度:57   发布时间:2023-12-21 18:49:07.0
1.直接获取权限(使用Retrolambda使代码更加简洁,当然并不是必须使用):


// 必须在初始化阶段调用,例如onCreate()方法中
RxPermissions.getInstance(this)
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // 在android 6.0之前会默认返回true
           // 已经获取权限
        } else {
           // 未获取权限
        }
    });
2.通过条件触发获取权限(结合RxBinding使用)


// 必须在初始化阶段调用,例如onCreate()方法中
RxView.clicks(findViewById(R.id.enableCamera))
    .compose(RxPermissions.getInstance(this).ensure(Manifest.permission.CAMERA))
    .subscribe(granted -> {
        // 当R.id.enableCamera被点击的时候触发获取权限
    });


3.一次请求多个权限(有两种方式)


如果同时请求多个权限,下面这种方式会合并请求结果,即所有权限请求成功会返回true,若有一个权限未成功则返回false。


RxPermissions.getInstance(this)
    .request(Manifest.permission.CAMERA,
             Manifest.permission.READ_PHONE_STATE)
    .subscribe(granted -> {
        if (granted) {
           // 所有权限请求被同意
        } else {
           // 至少有一个权限没同意
        }
    });
当然你可以通过requestEach or ensureEach 来分别获取每一个权限请求的结果。


RxPermissions.getInstance(this)
    .requestEach(Manifest.permission.CAMERA,
             Manifest.permission.READ_PHONE_STATE)
    .subscribe(permission -> { // 会发送两个Permission对象
        if (permission.granted) {
           // `permission.name` is granted !
        }
    });