美文网首页RxJava
RxJava<第二十九篇>:RxPermission

RxJava<第二十九篇>:RxPermission

作者: NoBugException | 来源:发表于2019-04-02 21:22 被阅读2次

    我在RxPermission 用法已经介绍过RxPermission的基本用法了。

    以下代码就是RxPermission优雅的代码

        String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION};
        RxPermissions rxPermissions = new RxPermissions(this);
        rxPermissions.requestEach(permissions)
                .subscribe(new Consumer<Permission>() {
                    @Override
                    public void accept(Permission permission) throws Exception {
                        if (permission.granted) {
                            // 用户已经同意该权限
                            //result.agree(permission);
                        } else if (permission.shouldShowRequestPermissionRationale) {
                            // 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时,还会提示请求权限的对话框
                            //result.refuse(permission);
                        } else {
                            // 用户拒绝了该权限,并且选中『不再询问』,提醒用户手动打开权限
                            //result.noMoreQuestions(permission);
                        }
                    }
                });
    

    效果如下

    图片.png

    下面结合Rxbinding

    首先添加依赖

    implementation 'com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2'
    implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
    
    (1)如果只申请一个权限的情况下

    代码如下:

                RxPermissions rxPermissions = new RxPermissions(this);
                RxView.clicks(bt_1)
                        .compose(rxPermissions.ensure(Manifest.permission.CAMERA))
                        .subscribe(new Consumer<Boolean>() {
                            @Override
                            public void accept(Boolean granted) throws Exception {
                                if(granted){
                                    //允许
    
                                }else{
                                    //拒绝
                                }
                            }
                        });
    
    (2)如果一次性申请多个权限的情况下

    代码如下

                RxPermissions rxPermissions = new RxPermissions(this);
                RxView.clicks(bt_1)
                        .compose(rxPermissions.ensure(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION))
                        .subscribe(new Consumer<Boolean>() {
                            @Override
                            public void accept(Boolean granted) throws Exception {
                                if(granted){
                                    //允许
    
                                }else{
                                    //拒绝
                                }
    
                            }
                        });
    

    这里观察者接收一个boolean值,只有当所有权限都申请成功时才会返回true,否则但会false。

    相关文章

      网友评论

        本文标题:RxJava<第二十九篇>:RxPermission

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