Android 授予权限后未调用RxPermissions

Android 授予权限后未调用RxPermissions,android,rx-java,android-permissions,rx-java3,rxpermissions,Android,Rx Java,Android Permissions,Rx Java3,Rxpermissions,我正在使用RxPermissions来处理项目中的权限 'com.github.tbruyelle:rxpermissions:0.12' 'io.reactivex.rxjava3:rxjava:3.0.4' 这是我处理摄像机权限的代码: new RxPermissions((FragmentActivity) context).request(Manifest.permission.CAMERA) .subscribe(granted -> {

我正在使用RxPermissions来处理项目中的权限

 'com.github.tbruyelle:rxpermissions:0.12'
 'io.reactivex.rxjava3:rxjava:3.0.4'
这是我处理
摄像机
权限的代码:

new RxPermissions((FragmentActivity) context).request(Manifest.permission.CAMERA)
            .subscribe(granted -> {
                if(granted){
                    Intent packageReceiveIntent = new Intent(context, ReceivePackageActivity.class);
                    context.startActivity(packageReceiveIntent);
                }
            });
这被称为
onClick
事件

由于某种原因,
消费者
中的代码在
权限
被授予后不会被调用,我必须点击按钮两次才能打开活动

我在应用程序的不同部分使用了相同的代码,它工作得很好,我不明白为什么在一个片段中它工作得很好,而在另一个片段中它不工作

我也这样尝试过,但没有成功:

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

我对RxPermission也有同样的问题。为解决此问题,我检查,如果未授予权限,则我请求权限

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。快乐编码

只是问一下,但是你真的想要/需要另一个库来处理权限吗?@a_local_没有人会避免担心框架版本。如果sdk是pre-M,观察者将自动收到一个已授予的结果。防止您在权限请求和结果处理之间拆分代码。目前,如果没有这个库,您必须在一个位置请求权限,并在活动中处理结果。onRequestPermissionsResult()我仍然不认为这有什么好处,但这并不重要,我只是问您是否特别想使用这个库。这看起来很有希望。我试试看。您能否提供Java中
flatMap
的替代方案?如果你有时间的话,还是整个片段?Cheers No problem,Observable.just(checkisgrated(activity,permission)).flatMap(isgrated->{if(isgrated)返回Observable.just(true);else返回新的RxPermissions(activity).request(permission);}.subscribe();试过了,但没有运气,同样的行为。不过还是要谢谢你,伙计