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

Avoid ask others permission if one is not granted with RxPermissions

如果用户不授予权限,我想避免征求他人权限。

例如:我要求read/write外部存储和摄像头,如果用户首先拒绝,图书馆要求摄像头权限,在这种情况下摄像头权限是多余的。

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,但我不知道如果没有授予一个权限如何停止发出项目,而且如果用户授予所有权限我也无法获得最终结果。

我想你的问题已经解决了,但我会为遇到同样麻烦的其他人提供答案。

您只需要 takeUntil or takeWhile 运算符和 requestEach(取决于您想要的流行为)。 TakeUntil 取消订阅您的流,并只为您带来具有授予权限权限被拒绝之一的事件inclusive.If 你只想获得 permission granted 事件而没有任何事件 == denied,请使用 takeWhile 运算符。 只是也许你需要用这段代码试验一段时间,因为我还没有使用这个库,也许有些东西的行为并不完全符合你的要求。

所以代码可能是这样的:

 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();
        }
      });