android - 授予权限后未调用 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
我必须点击按钮两次才能打开活动。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。快乐编码!
推荐阅读
- web - 如何在您有一个包含符号链接的 docroot 路径的地方添加一个 vhost 条目
- json - 有没有办法将 json 对象分类为正确的组
- c++ - 如何使用通过引用传递的值来更新以删除双向链表中的出现
- python - 如何使用 pyopenssl 生成带密码的 pem 密钥和证书?
- c++ - 如果我没有重载,为什么自定义类会出现“'operator='不匹配”?
- mysql - golang sql query timeout
- angular - 如何将输入搜索栏更改为自动完成搜索?
- schema.org - 如何通过 Schema.org 代表航空公司的休息室?
- javascript - onclick 功能它仅在第二次单击后才起作用
- regex - 如何从正则表达式中排除案例?