国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解Android權限管理之RxPermission解決Android 6.0 適配問題

2019-12-12 04:31:44
字體:
來源:轉載
供稿:網友

前言:

上篇重點學習了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的權限適配。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康平县| 革吉县| 洪泽县| 文登市| 县级市| 九寨沟县| 梁平县| 平安县| 长春市| 漯河市| 东方市| 永济市| 滕州市| 福安市| 屏东县| 卫辉市| 波密县| 农安县| 克什克腾旗| 习水县| 左权县| 连平县| 遵义县| 伽师县| 偃师市| 嘉义市| 辽源市| 福安市| 扎赉特旗| 阿克| 长子县| 祁连县| 江门市| 神池县| 桦川县| 双桥区| 青川县| 康定县| 德令哈市| 山东省| 郴州市|