詳解Android權(quán)限管理之RxPermission解決Android 6.0 適配問題
前言:
上篇重點(diǎn)學(xué)習(xí)了Android 6.0的運(yùn)行時(shí)權(quán)限,今天還是圍繞著Android 6.0權(quán)限適配來總結(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)限模型的開源框架。
下載地址:點(diǎn)此下載
如何使用?
1.)在app module的build.gradle中添加如下配置
使用該開源框架minSdkVersion 必須小于9
repositories {
  jcenter() // If not already there
}
dependencies {
  compile 'com.tbruyelle.rxpermissions:rxpermissions:0.9.0@aar'
}
如果使用的RxJava2的話使用下面的配置
與RxJava不同的是包名變成了com.tbruyelle.rxpermissions2,不過說實(shí)話RxJava2我還沒使用過。
dependencies {
  compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.2@aar'
}
2.)直接申請權(quán)限使用
RxPermissions.getInstance(this)是以單例的形式使用的,這里以申請拍照權(quán)限為例
RxPermissions.getInstance(this)
  .request(permissions)
  .subscribe(new Action1<Boolean>() {
    @Override
    public void call(Boolean granted) {
    if (granted) { // 在android 6.0之前會默認(rèn)返回true
      // 已經(jīng)獲取權(quán)限
      String jpgPath = getCacheDir() + "test.jpg";
      takePhotoByPath(jpgPath, 2);
    } else {
      // 未獲取權(quán)限
      Toast.makeText(MainActivity.this, "您沒有授權(quán)該權(quán)限,請?jiān)谠O(shè)置中打開授權(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之前會默認(rèn)返回true
      // 已經(jīng)獲取權(quán)限
      String jpgPath = getCacheDir() + "test.jpg";
      takePhotoByPath(jpgPath, 2);
    } else {
      // 未獲取權(quán)限
      Toast.makeText(MainActivity.this, "您沒有授權(quán)該權(quán)限,請?jiān)谠O(shè)置中打開授權(quán)", Toast.LENGTH_SHORT).show();
    }
    }
  });
3.)同時(shí)請求多個(gè)權(quán)限(合并結(jié)果)
比如同時(shí)申請拍照和錄音權(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之前會默認(rèn)返回true
      // 已經(jīng)獲取權(quán)限
      String jpgPath = getCacheDir() + "test.jpg";
      takePhotoByPath(jpgPath, 2);
    } else {
      // 未獲取權(quán)限
      Toast.makeText(MainActivity.this, "您沒有授權(quán)該權(quán)限,請?jiān)谠O(shè)置中打開授權(quán)", Toast.LENGTH_SHORT).show();
    }
    }
  });
如果同時(shí)請求多個(gè)權(quán)限,下面這種方式會合并請求結(jié)果,即所有權(quán)限請求成功會返回true,若有一個(gè)權(quán)限未成功則返回false。
 4.)同時(shí)請求多個(gè)權(quán)限(分別獲取結(jié)果)
如果想要在同時(shí)請求多個(gè)權(quán)限,又想分別獲取授權(quán)結(jié)果的話,可以調(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, "您沒有授權(quán)該權(quán)限,請?jiān)谠O(shè)置中打開授權(quán)", Toast.LENGTH_SHORT).show();
        }
      } else if (permission.name.equals(Manifest.permission.RECORD_AUDIO)) {
      }
      }
    });
總結(jié):
目前我們就是采用RxPermission來進(jìn)行Android 6.0的權(quán)限適配。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android運(yùn)行時(shí)權(quán)限終極方案(PermissionX)
 - Android超清晰6.0權(quán)限申請AndPermission
 - Android權(quán)限HaloPermission詳細(xì)使用
 - android6.0權(quán)限動態(tài)申請框架permissiondispatcher的方法
 - Android EasyPermissions官方庫高效處理權(quán)限相關(guān)教程
 - Android.permission.MODIFY_PHONE_STATE權(quán)限問題解決辦法
 - Android權(quán)限管理之Permission權(quán)限機(jī)制及使用詳解
 - Android權(quán)限操作之uses-permission詳解
 - Android 權(quán)限(permission)整理
 - Android開發(fā)之permission動態(tài)權(quán)限獲取詳解
 
相關(guān)文章
 Android讀取用戶號碼,手機(jī)串號,SIM卡序列號的實(shí)現(xiàn)代碼
以下是對Android讀取用戶號碼,手機(jī)串號,SIM卡序列號的實(shí)現(xiàn)代碼進(jìn)行了介紹,需要的朋友可以過來參考下2013-07-07
 Android?妙用TextView實(shí)現(xiàn)左邊文字,右邊圖片
這篇文章主要介紹了Android?妙用TextView實(shí)現(xiàn)左邊文字,右邊圖片的相關(guān)資料,需要的朋友可以參考下2023-07-07
 Android SwipeRefreshLayout仿抖音app靜態(tài)刷新
這篇文章主要為大家詳細(xì)介紹了Android SwipeRefreshLayout仿抖音app靜態(tài)刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
 Android項(xiàng)目中使用HTTPS配置的步驟詳解
這篇文章主要給大家介紹了關(guān)于Android項(xiàng)目中使用HTTPS配置步驟的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-06-06
 Android實(shí)現(xiàn)登錄郵箱的自動補(bǔ)全功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)登錄郵箱的自動補(bǔ)全功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04
 Android中findViewById返回為空null的快速解決辦法
這篇文章主要介紹了Android中findViewById返回為空null的快速解決辦法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
 Android頂部工具欄和底部工具欄的簡單實(shí)現(xiàn)代碼
Android頂部工具欄和底部工具欄的簡單實(shí)現(xiàn)代碼,需要的朋友可以參考一下2013-05-05

