安卓6.0之后被列入危险等级的权限都需要动态申请,最近在做二维码扫描的时候遇到了这个问题,调用摄像头也被列为危险等级。
首先需要导入依赖
//RxPermissions
implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
implementation 'io.reactivex:rxjava:1.1.3'
需要的权限也还是需要写在AndroidManifest.xml里
//以调用相机为例
<uses-permission android:name="android.permission.CAMERA" />
这里我们假设Button的onClick事件需要调用摄像头
//点击button之后RxPermissions会为我们申请运行时权限
RxPermissions.getInstance(MainActivity.this)
.request(Manifest.permission.READ_CALENDAR)//这里填写所需要的权限多个的话可以逗号隔开
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
if (aBoolean) {//true表示获取权限成功(注意这里在android6.0以下默认为true)
Log.i("permissions", Manifest.permission.READ_CALENDAR + ":获取成功" );
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//用来打开相机的Intent
if(takePhotoIntent.resolveActivity(getPackageManager())!=null){//这句作用是如果没有相机则该应用不会闪退,要是不加这句则当系统没有相机应用的时候该应用会闪退
startActivity(takePhotoIntent);//启动相机
}
} else {//表示权限被拒绝
Log.i("permissions", Manifest.permission.READ_CALENDAR + ":获取失败" );
}
}
});
上面的代码写在你需要申请权限的地方就可以了,非常的简单。