RxJava

RxJava<第二十九篇>:RxPermission

2019-04-02  本文已影响2人  NoBugException

我在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。

上一篇 下一篇

猜你喜欢

热点阅读