Android 6.0動態獲取許可權開源專案
Android 6.0 相比之前的Android版本有一個很大的不同點,就是動態獲取許可權,即不僅在Manifest檔案裡設定各種許可權,在使用一些危險許可權時候還得動態的彈出個對話方塊讓客戶去選擇授予這個許可權。
基本內容和程式碼就不重複了,大家可以參考這一篇:
http://gudong.name/%E6%8A%80%E6%9C%AF/2015/11/10/android_m_permission.html
或者http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1110/3670.html
需要動態賦予的許可權列表是:
Permission Group |
Permissions |
android.permission-group.CALENDAR |
· android.permission.READ_CALENDAR · android.permission.WRITE_CALENDAR |
android.permission-group.CAMERA |
· android.permission.CAMERA |
android.permission-group.CONTACTS |
· android.permission.READ_CONTACTS · android.permission.WRITE_CONTACTS · android.permission.GET_ACCOUNTS |
android.permission-group.LOCATION |
· android.permission.ACCESS_FINE_LOCATION · android.permission.ACCESS_COARSE_LOCATION |
android.permission-group.MICROPHONE |
· android.permission.RECORD_AUDIO |
android.permission-group.PHONE |
· android.permission.READ_PHONE_STATE · android.permission.CALL_PHONE · android.permission.READ_CALL_LOG · android.permission.WRITE_CALL_LOG · com.android.voicemail.permission.ADD_VOICEMAIL · android.permission.USE_SIP · android.permission.PROCESS_OUTGOING_CALLS |
android.permission-group.SENSORS |
· android.permission.BODY_SENSORS |
android.permission-group.SMS |
· android.permission.SEND_SMS · android.permission.RECEIVE_SMS · android.permission.READ_SMS · android.permission.RECEIVE_WAP_PUSH · android.permission.RECEIVE_MMS · android.permission.READ_CELL_BROADCASTS |
android.permission-group.STORAGE |
· android.permission.READ_EXTERNAL_STORAGE · android.permission.WRITE_EXTERNAL_STORAGE |
下面是幾個開源的專案,及它們的特點:
http://blog.csdn.net/a1018875550/article/details/51525438
PermissionsDispatcher:使用註解的形式設定許可權,
@RuntimePermissions 是必須的註冊當前activity或fragment
@NeedsPermission 是必須要有的,在需要許可權的方法上新增
@OnShowRationale 註釋一個方法解釋為什麼需要這個許可權並提示使用者判斷是否允許
@OnPermissionDenied 當權限被拒絕時呼叫
@OnNeverAskAgain 當用戶勾選了不再提示時呼叫
優點:功能齊全,程式碼簡潔。
缺點:配置較麻煩,必須在Android Studio 2.0+版本使用
PermissionGen:https://github.com/lovedise/PermissionGen
在需要許可權的方法中加入需要許可權的程式碼,然後覆蓋onRequestPermissionsResult(),然後添加註解的方法@PermissionFail(),@PermissionSuccess(),編寫響應的邏輯。
優點:配置簡單,引用庫即可,程式碼簡潔
缺點:功能較少,目前只找到了允許和拒絕的回撥
在上一個的基礎上把執行時註解改成了編譯時註解。需要解釋會自動呼叫解釋註解的方法@ShowRequestPermissionRationale()
程式碼比上面更簡潔了一些,沒有用註解,不需要覆蓋onRequestPermissionsResult(),配置不麻煩,這個完全遵循Rx規則,功能上目前沒有找到解釋的回撥(原始碼不多,個人感覺更改方便)。
RxView.clicks(findViewById(R.id.enableCamera))
.compose(RxPermissions.getInstance(this).ensure(Manifest.permission.CAMERA))
.subscribe(granted -> {
// R.id.enableCamera has been clicked
});
//If multiple permissions at the same time, the result is combined :
RxPermissions.getInstance(this)
.request(Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE)
.subscribe(granted -> {
if (granted) {
// All requested permissions are granted
} else {
// At least one permission is denied
}
});
//You can also observe a detailed result with requestEach or ensureEach :
RxPermissions.getInstance(this)
.requestEach(Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE)
.subscribe(permission -> { // will emit 2 Permission objects
if (permission.granted) {
// `permission.name` is granted !
}
});.
功能齊全,沒有使用註解,配置簡單,但需要實現OnPermissionCallback介面,實現裡面的方法來動態設定許可權。