RxPermissions 动态权限申请
https://github.com/tbruyelle/RxPermissions
Project
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
Module
def rxjava_version = "2.0.1"
//RxJava的依赖包
implementation 'io.reactivex.rxjava2:rxjava:' + rxjava_version
//RxAndroid的依赖包
implementation 'io.reactivex.rxjava2:rxandroid:' + rxjava_version
//权限
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
AndroidManifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.arthenica.mobileffmpeg">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:supportsRtl="true"
android:theme="@style/AppTheme"/>
</manifest>
方法一,申请多个权限时,有一个失败则返回失败。
- Java中的用法
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions
.request( Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA)
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean){
Log.e(TAG, "获取权限成功" );
}else {
Log.e(TAG, "获取权限失败" );
}
}
});
- Kotlin中的用法
val rxPermissions = RxPermissions(this)
rxPermissions
.request(Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA)
.subscribe {
TODO("Not yet implemented")
}
方法二,申请多个权限时,可以得到每个权限的申请结果
requestEachRxPermission(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA
);
private void requestEachRxPermission(String... permissions) {
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions.requestEach(permissions).subscribe(new Consumer<Permission>() {
@Override
public void accept(@NonNull Permission permission) throws Exception {
if (permission.granted) {
Toast.makeText(activity, "已获取权限" + permission.name, Toast.LENGTH_SHORT).show();
Log.e(TAG, "已获取权限: "+permission.name);
} else if (permission.shouldShowRequestPermissionRationale) {
//拒绝权限请求
Toast.makeText(activity, "已拒绝权限" + permission.name, Toast.LENGTH_SHORT).show();
Log.e(TAG, "已拒绝权限: "+ permission.name );
} else {
// 拒绝权限请求,并不再询问
// 可以提醒用户进入设置界面去设置权限
Toast.makeText(activity, "已拒绝权限" + permission.name + "并不再询问", Toast.LENGTH_SHORT).show();
Log.e(TAG, "已拒绝权限,并不再询问: "+ permission.name );
}
}
});
}
2019-12-23 17:25:08.737 32584-32584/com.jianji.delogo E/TestActivity: 已拒绝权限: android.permission.READ_EXTERNAL_STORAGE
2019-12-23 17:25:08.742 32584-32584/com.jianji.delogo E/TestActivity: 已拒绝权限: android.permission.WRITE_EXTERNAL_STORAGE
2019-12-23 17:25:08.746 32584-32584/com.jianji.delogo E/TestActivity: 已获取权限: android.permission.READ_PHONE_STATE
2019-12-23 17:25:08.751 32584-32584/com.jianji.delogo E/TestActivity: 已获取权限: android.permission.CAMERA