APP在適配6.0版本的時候先巴,我們就需要給應(yīng)用增加運行時權(quán)限管理。在6.0開始有一套新的權(quán)限管理機(jī)制便于更好的保護(hù)用戶隱私鼠锈,一般涉及用戶隱私的都需要提示用戶是否允許和拒絕APP使用該權(quán)限瓜挽。
RxPermissions github地址
1嫁审、在app module的build.gradle中添加依賴
RxPermissions需要先引入rxjava支持。
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar'
RxJava2使用如下依賴
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
2克锣、RxPermissions獲取運行時權(quán)限
2.1創(chuàng)建RxPermissions對象
RxPermissions rxPermissions = new RxPermissions(Activity);
2.2 單個權(quán)限申請
rxPermissions.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
if (aBoolean) {
//用戶同意使用write權(quán)限
}else {
TipUtil.logE("Activity","用戶拒絕使用權(quán)限");
}
}
});
2.3同時請求多個權(quán)限
rxPermissions.request(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION)//這里填寫所需要的權(quán)限
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
if (aBoolean) {
//當(dāng)所有權(quán)限都允許之后茵肃,返回true
} else {
//只要有一個權(quán)限禁止,返回false娶耍,
//下一次申請只申請沒通過申請的權(quán)限
}
}
});
2.4分別申請多個權(quán)限
rxPermissions.requestEach( Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(new Action1<Permission>() {
@Override
public void call(Permission permission) {
if (permission.name.equals(Manifest.permission.ACCESS_FINE_LOCATION)) {
//當(dāng)ACCESS_FINE_LOCATION權(quán)限獲取成功時免姿,permission.granted=true
TipUtil.logE(TAG, Manifest.permission.ACCESS_FINE_LOCATION + ":" + permission.granted);
}
if (permission.name.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//當(dāng)WRITE_EXTERNAL_STORAGE權(quán)限獲取成功時,permission.granted=true
TipUtil.logE(TAG, Manifest.permission.WRITE_EXTERNAL_STORAGE + ":" + permission.granted);
}
}
});
2.5不再提示后的權(quán)限申請
rxPermissions.requestEach(Manifest.permission.CAMERA)
.subscribe(new Action1<Permission>() {
@Override
public void call(Permission permission) {
if (permission.granted) {
// 用戶允許權(quán)限
} else if (permission.shouldShowRequestPermissionRationale) {
// 用戶拒絕了權(quán)限申請
} else {
// 用戶拒絕榕酒,并且選擇不再提示
// 可以引導(dǎo)用戶進(jìn)入權(quán)限設(shè)置界面開啟權(quán)限
}
}
});