问题描述
我正在使用 RxPermissions 来处理我的项目中的权限。
'com.github.tbruyelle:rxpermissions:0.12'
'io.reactivex.rxjava3:rxjava:3.0.4'
这是我处理 CAMERA
权限的代码:
new RxPermissions((FragmentActivity) context).request(Manifest.permission.CAMERA)
.subscribe(granted -> {
if(granted){
Intent packageReceiveIntent = new Intent(context,ReceivePackageActivity.class);
context.startActivity(packageReceiveIntent);
}
});
这被称为 onClick
事件。
出于某种原因,在 Consumer
为 permission
之后没有调用 granted
中的代码,我必须点击按钮两次才能打开活动。
我在应用程序的不同部分使用了相同的代码,它运行良好,我不明白为什么在 Fragment 中它运行良好,而在另一个中却没有。
我也这样试过,但没有成功:
new RxPermissions(requireActivity()).request(Manifest.permission.CAMERA)
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.computation())
.subscribe(aBoolean -> {
if (aBoolean) {
Intent packageReceiveIntent = new Intent(requireActivity(),ReceivePackageActivity.class);
requireActivity().startActivity(packageReceiveIntent);
}
});
解决方法
我对 RxPermissions 有同样的问题。为了解决这个问题,我检查,如果没有获得许可,那么我请求许可
Observable.just(isGranted(Manifest.permission.CAMERA))
.flatMap { granted ->
if (granted)
Observable.just(true)
else rxPermissions.request(permission)
}
.subscribe {
}
fun checkIsGranted(permission: String): Boolean {
return ContextCompat.checkSelfPermission(activity,permission) == PackageManager.PERMISSION_GRANTED;
}
它是用kotlin写的,你可以改成java。快乐编码!
,我遇到的情况是Activity被销毁了,所以没有调用RxPermissions的回调。