如果未授予RxPermissions,请避免向他人许可

时间:2016-12-16 16:02:21

标签: android rx-android rxpermissions

如果用户没有授权,我希望避免让别人同意。

例如:我要求读/写外部存储和摄像头,如果用户拒绝第一个,图书馆要求摄像头许可,在这种情况下摄像头许可是多余的。

RxPermissions.getInstance(getActivity()).request(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA)
                .subscribe(granted -> {
                    if (granted) {
                       dispatchCamera();
                    } else {
                        showError();
                    }
                });

我想我可以使用requestEach,但是我不知道如果没有授予一个权限就停止发出项目,如果用户授予所有权限,我也无法获得最终结果。

1 个答案:

答案 0 :(得分:3)

我想你的问题已经解决了,但我会为其他人解决问题。

requestEach 只需要takeUntiltakeWhile运算符(取决于您想要的流行为)。 TakeUntil 取消订阅流式广告,并仅为您带来已授予权限的事件以及权限被拒绝之一。如果您只想获取授予事件的权限没有任何==拒绝,请使用 takeWhile opertator。 也许你不得不花费一段时间来使用这段代码,因为我还没有使用这个库,也许某些东西的行为并不完全符合你的想法。

所以代码可能是这样的:

 RxPermissions
      .getInstance(getActivity())
      .requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE, 
         Manifest.permission.READ_EXTERNAL_STORAGE, 
         Manifest.permission.CAMERA)
      .takeWhile(permission -> permission.granted)
      //or use take untill if you want to get permission.granted == false event
      //.takeUntil(permission -> !permission.granted)
      .subscribe(granted -> {
        if (granted) {
           dispatchCamera();
        } else {
           showError();
        }
      });