只需要写如下代码,即可使用rxPermission实现动态获取权限,不需要activity重写任何代码
RxPermission rxPermission = new RxPermission(this);
rxPermission.requestPermission(Permission.Camera)
.suscrible(permission -> {
if(permission.isGranted()) {
// go ahead
}
});
调用方式非常友好,此处有两个问题
1. 为什么此处activity请求权限不需要覆写onRequestPermissionsResult
2. 如何做到用户点击”同意”按钮后才向下游发射数据
在了解RxPermission的源码后发现
针对第一个问题,我们只需要在调用方Activity中插入一个StubFragment,然后用该StubFragment来调用requestPermissions方法,这样我们可以在StubFragment中onRequestPermissionsResult中接收结果,对于调用方activity来说完全无感知。
针对第二个问题,rxPermission.requestPermission会返回PublishSubject,用户点击”同意”按钮后会调用onNext发射数据,调用方就能收到是否有权限的消息。
publishSubject.onNext();
publishSubject.onComplete();