如果未授予 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();
}
});
如果用户不授予权限,我想避免征求他人权限。
例如:我要求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();
}
});