如果用户没有授权,我希望避免让别人同意。
例如:我要求读/写外部存储和摄像头,如果用户拒绝第一个,图书馆要求摄像头许可,在这种情况下摄像头许可是多余的。
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,但是我不知道如果没有授予一个权限就停止发出项目,如果用户授予所有权限,我也无法获得最终结果。
答案 0 :(得分:3)
我想你的问题已经解决了,但我会为其他人解决问题。
requestEach 只需要takeUntil或takeWhile运算符(取决于您想要的流行为)。 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();
}
});