Android 中RxPermissions 的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中RxPermissions 的使用相关的知识,希望对你有一定的参考价值。
参考技术A android 中RxPermissions 的使用方法详解以请求拍照、读取位置权限为例
第一步,在module的build.gradle中的
dependencies
// RxPermissions 的使用方法详解
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.4'
还有在最外面那个文件夹下面的build.gradle 加入
allprojects
repositories
maven url 'https://jitpack.io'
第二步,在AndroidManifest.xml中添加自己需要用到的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA"/>
第三步,activity中使用以及注意事项
1,创建 RxPermissions 实例
RxPermissions rxPermissions = new RxPermissions(this);
2、RxPermissions 里面的方法具体实现
public static final String[] permissionsGroup =new String[]
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA;
rxPermissions.requestEach(permissionsGroup)
.subscribe(new Observer()
@Override
public void onSubscribe(Disposable d)
@Override
public void onNext(Permission permission)
//这里判断用户是否同意了该权限,如:
if(permission.name.equals(Manifest.permission.CAMERA))
//已获取权限,可以干想干的咯
else
//主人,我被禁止啦,去设置权限设置那把我打开哟
@Override
public void onError(Throwable e)
@Override
public void onComplete()
);
使用RxPermission框架对android6.0权限进行检测
可前往Github上进行查看相关DEMO
https://github.com/tbruyelle/RxPermissions
如果想用RxPermission,minSdkVersion
必须大于等于9.
在gradle中添加如下代码
repositories jcenter() // If not already there dependencies compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'举个例子
// Must be done during an initialization phase like onCreate RxPermissions.getInstance(this) .request(Manifest.permission.CAMERA) .subscribe(granted -> if (granted) // Always true pre-M // I can control the camera now else // Oups permission denied );如果你想要在一个特殊事件中触发权限申请,你需要在你的初始化段落里,将这个事件订阅。
你可以使用 JakeWharton/RxBinding 把你的view订阅为一个观察者。
举例
// Must be done during an initialization phase like onCreate RxView.clicks(findViewById(R.id.enableCamera)) .compose(RxPermissions.getInstance(this).ensure(Manifest.permission.CAMERA)) .subscribe(granted -> // R.id.enableCamera has been clicked );如果同时有多个权限请求,结果如下
RxPermissions.getInstance(this) .request(Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE) .subscribe(granted -> if (granted) // All requested permissions are granted else // At least one permission is denied );你也可以用 requestEach和
ensureEach
订阅具体的结果。
RxPermissions.getInstance(this) .requestEach(Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE) .subscribe(permission -> // will emit 2 Permission objects if (permission.granted) // `permission.name` is granted ! );
以上是关于Android 中RxPermissions 的使用的主要内容,如果未能解决你的问题,请参考以下文章
Android -- 开源库权限适配 RxPermissions 的基本使用