日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 6.0以上运行权限及RxPermissions的使用

發布時間:2023/12/31 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 6.0以上运行权限及RxPermissions的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳說Android 7.0的市場占有率終于1%了,Android 6.0基本上人人有了。這個時候,我不得不把軟件開發的SDK目標版本提升到了23。這是就要考慮實現權限的動態分配了。基于我項目用使用了RxJava,所以我就選擇了RxPermissions框架來實現權限的動態分配。

一、了解權限

??權限分兩種:普通權限、危險權限。普通權限在AndroidManifest.xml聲明就可以了,危險權限在AndroidManifest.xml聲明之后,還需要在軟件運行的時候,動態的獲取。目前危險權限一共有26個,其他的都是普通權限。
??Dangerous Permissions 共有26個:

group:android.permission-group.CAMERA
??permission:android.permission.CAMERA

group:android.permission-group.SENSORS
??permission:android.permission.BODY_SENSORS

group:android.permission-group.MICROPHONE
??permission:android.permission.RECORD_AUDIO

group:android.permission-group.CALENDAR
??permission:android.permission.READ_CALENDAR
??permission:android.permission.WRITE_CALENDAR

group:android.permission-group.LOCATION
??permission:android.permission.ACCESS_FINE_LOCATION
??permission:android.permission.ACCESS_COARSE_LOCATION

group:android.permission-group.STORAGE
??permission:android.permission.READ_EXTERNAL_STORAGE
??permission:android.permission.WRITE_EXTERNAL_STORAGE

group:android.permission-group.CONTACTS
??permission:android.permission.WRITE_CONTACTS
??permission:android.permission.GET_ACCOUNTS
??permission:android.permission.READ_CONTACTS

group:android.permission-group.SMS
??permission:android.permission.READ_SMS
??permission:android.permission.RECEIVE_WAP_PUSH
??permission:android.permission.RECEIVE_MMS
??permission:android.permission.RECEIVE_SMS
??permission:android.permission.SEND_SMS
??permission:android.permission.READ_CELL_BROADCASTS

group:android.permission-group.PHONE
??permission:android.permission.READ_CALL_LOG
??permission:android.permission.READ_PHONE_STATE
??permission:android.permission.CALL_PHONE
??permission:android.permission.WRITE_CALL_LOG
??permission:android.permission.USE_SIP
??permission:android.permission.PROCESS_OUTGOING_CALLS
??permission:com.android.voicemail.permission.ADD_VOICEMAIL

android.permission.ANSWER_PHONE_CALLS

??一共九大分組,每個分組只要申請其中一個權限,其他權限都可以獲得。最后一個是Android 8.0新添加的權限,是限制接聽來電的權限。如果想查看其他權限可以查看訪問權限API。

二、RxPermissions

在GitHub上的地址是:https://github.com/tbruyelle/RxPermissions。
??現在主要有兩個分支,如下圖:

??2.x分支是基于RxJava2的源碼。master是基于Rxjava的源碼。不管是RxJava、RxJava2對RxPermissions的使用沒有影響,只是導入的依賴不一樣。
??RxJava、RxJava2導入的依賴分別是:

compile 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar' compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'

RxPermissions的使用

1、minSdkVersion 必須大于等于11.

2、在build.gradle中配置。

如果沒有的話,添加這個。

android {repositories {jcenter() // If not already there} }

再添加依賴:
基于RxJava

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

基于RxJava2

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

3、初始化

RxPermissions rxPermissions = RxPermissions.getInstance(this);

4、使用方法

申請一個權限的方法:

// 假如申請調用系統拍照 rxPermissions.request(Manifest.permission.CAMERA).subscribe(new Subscriber<Boolean>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(Boolean aBoolean) {// aBoolean:true開啟成功 false開啟失敗} });

申請多個權限的方法:

rxPermissions.request(Manifest.permission.CAMERA,Manifest.permission.ACCESS_FINE_LOCATION).subscribe(new Subscriber<Boolean>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(Boolean aBoolean) {// aBoolean:true開啟成功 false開啟失敗// 只要有一個權限申請失敗,就返回false} });

申請權限并查看申請結果的詳細信息:

rxPermissions.requestEach(permissions).subscribe(new Subscriber<Permission>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(Permission permission) {if (permission.granted) {Log.e("申請成功:",permission.name);} else if (permission.shouldShowRequestPermissionRationale) {Log.e("申請取消:",permission.name);} else {Log.e("申請失敗:",permission.name);}}});

??這個方法,是實現返回每個權限申請的結果。返回的是Permission 類。包含權限申請結果,包含:permission.granted表示申請成功;permission.shouldShowRequestPermissionRationale表示申請取消;如果這兩個都不是,表示申請被拒絕,只能在設置界面手動開啟。跳轉至系統設置界面的方法:

/*** 獲取應用詳情頁面intent*/ private void getAppDetailSettingIntent() {Intent localIntent = new Intent();localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (Build.VERSION.SDK_INT >= 9) {localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");localIntent.setData(Uri.fromParts("package", getPackageName(), null));} else {localIntent.setAction(Intent.ACTION_VIEW);localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());}startActivity(localIntent);mContext.overridePendingTransitionEnter(); }

?? github還提到了ensure、ensureEach 方法。也分別對應了返回的簡單結果和詳細結果。這兩個方法是實現view綁定權限請求的框架RxBinding時使用的,RxBinding是要結合RxPermission使用的。RxBinding的GitHub地址
??權限的請求方法,最好寫在onCreate()方法里,這樣在啟動界面的時候,會先檢測權限信息。

總結

以上是生活随笔為你收集整理的Android 6.0以上运行权限及RxPermissions的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。