編輯:關於Android編程
前言:
上篇重點學習了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的權限適配。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
Android ViewPager 畫廊效果從上面的圖片可以看到,當添加多張圖片的時候,能夠在下方形成一個畫廊的效果,我們左右拉動圖片來看我們添加進去的圖片,效果是不是好
以前給大家介紹的xUtils是國內比較火的快速開發框架,但是它的注解機制不是太穩定而且注解可選也比較少,今天給大家介紹一個國外的一個框架主要專注於注解的開發,簡化Andr
Android 開發中對話框隨處可見,現將自己做過的項目中的Dialog,做出一個系統的總結。從以下方面開始總結:1.AlertDialog的使用2.Dialog的使用3
靠譜助手安裝失敗彈窗提示需要.NET Framework 2.0或.NET Framework 4.0,這是因為系統沒有安裝.NET Frame