首页 > 解决方案 > 授予权限后未调用 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事件。

由于某种原因,在 is 之后没有调用里面的代码,Consumer我必须点击按钮两次才能打开活动。permissiongranted

我在应用程序的不同部分使用了相同的代码并且它工作正常,我不明白为什么在 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);
                }
            });

标签: androidrx-javaandroid-permissionsrx-java3rxpermissions

解决方案


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


推荐阅读