詳解Android許可權管理之RxPermission解決Android 6.0 適配問題_Android

來源:互聯網
上載者:User

前言:

上篇重點學習了Android 6.0的運行時許可權,今天還是圍繞著Android 6.0許可權適配來總結學習,這裡主要介紹一下我們公司解決Android 6.0許可權適配的方案:RxJava+RxPermission。這裡不再介紹Android 6.0運行時許可權了,直接看下如何使用RxPermission。

RxPermission:

用於適配Android 6.0新的許可權模型的開源架構。

下載地址:點此下載

如何使用?

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,不過說實話RxJava2我還沒使用過。

dependencies {  compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.2@aar'}

2.)直接申請許可權使用

RxPermissions.getInstance(this)是以單例的形式使用的,這裡以申請拍照許可權為例

RxPermissions.getInstance(this)  .request(permissions)  .subscribe(new Action1<Boolean>() {    @Override    public void call(Boolean granted) {    if (granted) { // 在android 6.0之前會預設返回true      // 已經擷取許可權      String jpgPath = getCacheDir() + "test.jpg";      takePhotoByPath(jpgPath, 2);    } else {      // 未擷取許可權      Toast.makeText(MainActivity.this, "您沒有授權該許可權,請在設定中開啟授權", Toast.LENGTH_SHORT).show();    }    }  });

這裡直接返回是否授權,我們可以根據這個值進行不同的處理。

3.)條件觸發擷取許可權(結合RxBinding使用)

關於RxBinding的可以查看這個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之前會預設返回true      // 已經擷取許可權      String jpgPath = getCacheDir() + "test.jpg";      takePhotoByPath(jpgPath, 2);    } else {      // 未擷取許可權      Toast.makeText(MainActivity.this, "您沒有授權該許可權,請在設定中開啟授權", Toast.LENGTH_SHORT).show();    }    }  });

3.)同時請求多個許可權(合并結果)

比如同時申請拍照和錄音許可權

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之前會預設返回true      // 已經擷取許可權      String jpgPath = getCacheDir() + "test.jpg";      takePhotoByPath(jpgPath, 2);    } else {      // 未擷取許可權      Toast.makeText(MainActivity.this, "您沒有授權該許可權,請在設定中開啟授權", Toast.LENGTH_SHORT).show();    }    }  });

如果同時請求多個許可權,下面這種方式會合并請求結果,即所有許可權請求成功會返回true,若有一個許可權未成功則返回false。

 4.)同時請求多個許可權(分別擷取結果)

如果想要在同時請求多個許可權,又想分別擷取授權結果的話,可以調用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 {        // 未擷取許可權        Toast.makeText(MainActivity.this, "您沒有授權該許可權,請在設定中開啟授權", Toast.LENGTH_SHORT).show();        }      } else if (permission.name.equals(Manifest.permission.RECORD_AUDIO)) {      }      }    });

總結:

目前我們就是採用RxPermission來進行Android 6.0的許可權適配。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.