1. 程式人生 > >Android 6.0動態獲取許可權開源專案

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 是必須的註冊當前activityfragment

@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介面,實現裡面的方法來動態設定許可權。