欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Android權(quán)限管理之RxPermission解決Android 6.0 適配問(wèn)題

 更新時(shí)間:2016年11月24日 10:06:17   作者:總李寫(xiě)代碼  
本篇文章主要介紹了Android權(quán)限管理之RxPermission解決Android 6.0 適配問(wèn)題,具有一定的參考價(jià)值,有需要的可以了解一下。

前言:

上篇重點(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論