1. 程式人生 > >Android處理6.0獲取許可權問題的第三方框架------開源專案-Easypermissions

Android處理6.0獲取許可權問題的第三方框架------開源專案-Easypermissions

本人昨天要實現 手機拍照,相簿選擇功能的實現,  本以為很簡單,把以前的程式碼拷貝過來就可以咯,但是在 6.0手機測試中,發現  點選手機拍照,直接崩潰咯。連錯誤資訊都沒提示。  特別煩人。  後來聽朋友說,處理  6.0許可權問題,可以使用谷歌退出的三方框架__———————— Easypermissions

Easypermissions簡化了Android M的執行時許可權的申請、結果處理、判斷等步驟。

--------------------------------------------------

1 相關文件

官方文件:

執行時許可權官方文件解釋:

2 為什麼使用Easypermissions

Android M對許可權系統進行了改變。Android M之前所需許可權只需要在AndroidManifest中申請即可。但更新Android M系統後,部分“Dangerous Permission”需要在執行時詢問申請。

如下圖所示:


執行時許可權申請

程式碼中如果需要申請執行時許可權步驟:

1 檢查執行時許可權

ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED

2 申請許可權

ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

3 接收許可權處理結果

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults)
{ switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! Do the // contacts-related task you need to do. } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return; } // other 'case' lines to check for other // permissions this app might request } }

以上即是google建議的執行時許可權處理過程。程式碼量和處理地方還是比較繁瑣的。so,Easypermissions應運而生。

3 如何使用

首先,引用庫

dependencies {
  compile 'pub.devrel:easypermissions:0.1.9'
}

同樣,easypermissions處理許可權分為3步。

1 檢查許可權

String[] perms = {Manifest.permission.CAMERA, Manifest.permission.CHANGE_WIFI_STATE};
if (EasyPermissions.hasPermissions(this, perms)) {
   //...     
} else {
    //...
}

2 申請許可權

EasyPermissions.requestPermissions(this, "拍照需要攝像頭許可權",
                    RC_CAMERA_AND_WIFI, perms);

3 實現EasyPermissions.PermissionCallbacks介面,直接處理許可權是否成功申請

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        // Forward results to EasyPermissions
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

    //成功
    @Override
    public void onPermissionsGranted(int requestCode, List<String> list) {
        // Some permissions have been granted
        // ...
    }

    //失敗
    @Override
    public void onPermissionsDenied(int requestCode, List<String> list) {
        // Some permissions have been denied
        // ...
    }

4 總結

Easypermissions主要簡化了對許可權申請結果的處理和判斷,直接以介面的方式回撥處理結果。不需要再自行進行處理。

好用指數,5星!!!

結尾

本文  由 微信媽媽(公眾號買賣ontaobao.cn)  編輯整理,   轉載地址  http://www.jianshu.com/p/2b3661928e66