1、导入依赖:
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.1@aar'
compile 'io.reactivex.rxjava2:rxjava:2.0.5'
2、使用代码:
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RxPermissions permissions = new RxPermissions(MainActivity.this);
permissions.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(new Observer<Boolean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Boolean aBoolean) {
if (aBoolean){
openAlbum();
}else{
ToastUtil.showShortToast("读写权限被拒绝,你可以在设置中开启");
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
});
看看之前怎么处理运行时权限的:
findViewById(R.id.btn).setOnClickListener(arg0 -> { //相册
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSON_READ);
}else{
openAlbum();
}
}else{
openAlbum();
}
});
@TargetApi(23)
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case PERMISSON_CAREMA: //相机权限
break;
case PERMISSON_READ:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
openAlbum();
}else{
ToastUtil.showShortToast("读写权限被拒绝,你可以在设置中开启");
}
break;
default:
break;
}
}
对比一下,可以发现代码和逻辑都简洁了许多