詳解Android權(quán)限管理之RxPermission解決Android 6.0 適配問(wèn)題
前言:
上篇重點(diǎn)學(xué)習(xí)了Android 6.0的運(yùn)行時(shí)權(quán)限,今天還是圍繞著Android 6.0權(quán)限適配來(lái)總結(jié)學(xué)習(xí),這里主要介紹一下我們公司解決Android 6.0權(quán)限適配的方案:RxJava+RxPermission。這里不再介紹Android 6.0運(yùn)行時(shí)權(quán)限了,直接看下如何使用RxPermission。
RxPermission:
用于適配Android 6.0新的權(quán)限模型的開(kāi)源框架。
下載地址:點(diǎn)此下載
如何使用?
1.)在app module的build.gradle中添加如下配置
使用該開(kāi)源框架minSdkVersion 必須小于9
repositories {
jcenter() // If not already there
}
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.9.0@aar'
}
如果使用的RxJava2的話(huà)使用下面的配置
與RxJava不同的是包名變成了com.tbruyelle.rxpermissions2,不過(guò)說(shuō)實(shí)話(huà)RxJava2我還沒(méi)使用過(guò)。
dependencies {
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.2@aar'
}
2.)直接申請(qǐng)權(quán)限使用
RxPermissions.getInstance(this)是以單例的形式使用的,這里以申請(qǐng)拍照權(quán)限為例
RxPermissions.getInstance(this)
.request(permissions)
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean granted) {
if (granted) { // 在android 6.0之前會(huì)默認(rèn)返回true
// 已經(jīng)獲取權(quán)限
String jpgPath = getCacheDir() + "test.jpg";
takePhotoByPath(jpgPath, 2);
} else {
// 未獲取權(quán)限
Toast.makeText(MainActivity.this, "您沒(méi)有授權(quán)該權(quán)限,請(qǐng)?jiān)谠O(shè)置中打開(kāi)授權(quán)", Toast.LENGTH_SHORT).show();
}
}
});
這里直接返回是否授權(quán),我們可以根據(jù)這個(gè)值進(jìn)行不同的處理。
3.)條件觸發(fā)獲取權(quán)限(結(jié)合RxBinding使用)
關(guān)于RxBinding的可以查看這個(gè)JakeWharton/RxBinding
RxView.clicks(findViewById(R.id.request_permission))
.compose(RxPermissions.getInstance(this).ensure(Manifest.permission.CAMERA))
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean granted) {
if (granted) { // 在android 6.0之前會(huì)默認(rèn)返回true
// 已經(jīng)獲取權(quán)限
String jpgPath = getCacheDir() + "test.jpg";
takePhotoByPath(jpgPath, 2);
} else {
// 未獲取權(quán)限
Toast.makeText(MainActivity.this, "您沒(méi)有授權(quán)該權(quán)限,請(qǐng)?jiān)谠O(shè)置中打開(kāi)授權(quán)", Toast.LENGTH_SHORT).show();
}
}
});
3.)同時(shí)請(qǐng)求多個(gè)權(quán)限(合并結(jié)果)
比如同時(shí)申請(qǐng)拍照和錄音權(quán)限
RxPermissions.getInstance(MainActivity.this).request(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean granted) {
if (granted) { // 在android 6.0之前會(huì)默認(rèn)返回true
// 已經(jīng)獲取權(quán)限
String jpgPath = getCacheDir() + "test.jpg";
takePhotoByPath(jpgPath, 2);
} else {
// 未獲取權(quán)限
Toast.makeText(MainActivity.this, "您沒(méi)有授權(quán)該權(quán)限,請(qǐng)?jiān)谠O(shè)置中打開(kāi)授權(quán)", Toast.LENGTH_SHORT).show();
}
}
});
如果同時(shí)請(qǐng)求多個(gè)權(quán)限,下面這種方式會(huì)合并請(qǐng)求結(jié)果,即所有權(quán)限請(qǐng)求成功會(huì)返回true,若有一個(gè)權(quán)限未成功則返回false。
4.)同時(shí)請(qǐng)求多個(gè)權(quán)限(分別獲取結(jié)果)
如果想要在同時(shí)請(qǐng)求多個(gè)權(quán)限,又想分別獲取授權(quán)結(jié)果的話(huà),可以調(diào)用requestEach方法或者ensureEach方法
RxPermissions.getInstance(MainActivity.this).requestEach(Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO)
.subscribe(new Action1<Permission>() {
@Override
public void call(Permission permission) {
if (permission.name.equals(Manifest.permission.CAMERA)) {
if (permission.granted) {
String jpgPath = getCacheDir() + "test.jpg";
takePhotoByPath(jpgPath, 2);
} else {
// 未獲取權(quán)限
Toast.makeText(MainActivity.this, "您沒(méi)有授權(quán)該權(quán)限,請(qǐng)?jiān)谠O(shè)置中打開(kāi)授權(quán)", Toast.LENGTH_SHORT).show();
}
} else if (permission.name.equals(Manifest.permission.RECORD_AUDIO)) {
}
}
});
總結(jié):
目前我們就是采用RxPermission來(lái)進(jìn)行Android 6.0的權(quán)限適配。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android運(yùn)行時(shí)權(quán)限終極方案(PermissionX)
- Android超清晰6.0權(quán)限申請(qǐng)AndPermission
- Android權(quán)限HaloPermission詳細(xì)使用
- android6.0權(quán)限動(dòng)態(tài)申請(qǐng)框架permissiondispatcher的方法
- Android EasyPermissions官方庫(kù)高效處理權(quán)限相關(guān)教程
- Android.permission.MODIFY_PHONE_STATE權(quán)限問(wèn)題解決辦法
- Android權(quán)限管理之Permission權(quán)限機(jī)制及使用詳解
- Android權(quán)限操作之uses-permission詳解
- Android 權(quán)限(permission)整理
- Android開(kāi)發(fā)之permission動(dòng)態(tài)權(quán)限獲取詳解
相關(guān)文章
Android studio2.3.3升級(jí)到3.1.2坑(小記)
這篇文章主要介紹了Android studio2.3.3升級(jí)3.1.2坑(小記),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Android 如何獲取手機(jī)總內(nèi)存和可用內(nèi)存等信息
這篇文章主要介紹了Android系統(tǒng)檢測(cè)程序內(nèi)存占用各種方法,并對(duì)內(nèi)存信息的詳細(xì)介紹,需要的朋友可以參考下2016-07-07
Android自定義View之組合控件實(shí)現(xiàn)類(lèi)似電商app頂部欄
這篇文章主要為大家詳細(xì)介紹了Android自定義View之組合控件,實(shí)現(xiàn)類(lèi)似電商app頂部欄的相關(guān)資料,具有參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
Android 自定義閃屏頁(yè)廣告倒計(jì)時(shí)view效果
這篇文章主要介紹了Android 自定義閃屏頁(yè)廣告倒計(jì)時(shí)view效果,需要的朋友可以參考下2017-05-05
Android之AppWidget(桌面小部件)開(kāi)發(fā)淺析
這篇文章主要介紹了Android之AppWidget(桌面小部件)開(kāi)發(fā)淺析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
kotlin 官方學(xué)習(xí)教程之基礎(chǔ)語(yǔ)法詳解
這篇文章主要介紹了kotlin 官方學(xué)習(xí)教程之基礎(chǔ)語(yǔ)法詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android 中WebView 截圖的實(shí)現(xiàn)方式
這篇文章主要介紹了Android 中WebView 截圖的實(shí)現(xiàn)方式,WebView 作為一種特殊的控件,自然不能像其他系統(tǒng) View 或者截屏的方式來(lái)獲取截圖。本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2017-12-12
Kotlin Select協(xié)程多路復(fù)用的實(shí)現(xiàn)詳解
select是Kotlin 1.6中的特性,即選擇最快的結(jié)果。select與async、Channel結(jié)合使用,可以大大提高程序的響應(yīng)速度,還可以提高程序的靈活性、擴(kuò)展性2022-09-09
淺析Android中build.gradle的實(shí)用技巧
這篇文章主要介紹了淺析Android中build.gradle的實(shí)用技巧,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03

