授予权限后未调用 RxPermissions

问题描述

我正在使用 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 事件。

出于某种原因,在 Consumerpermission 之后没有调用 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的回调。