1. 程式人生 > >Android6.0動態許可權獲取詳解

Android6.0動態許可權獲取詳解

在Android6.0出來之前,大家基本都是在清淡配置檔案中間新增系統許可權。但在Android6.0之後很多許可權需要動態獲取。如拍Sd卡的寫入,寫出、震動,等等。

這裡為大家簡單的介紹一下如何進行動態許可權的獲取,以及如何編寫動態許可權封裝類。

這裡以獲取本地相機拍照為例。

一共兩步,1、建立動態許可權獲取類。2、呼叫。

1、先建立一個動態許可權的封裝類PermissionTool.class

,已方便在其他類裡面使用(不建議寫在Acticity裡面)

public class PermissionTool { private Context context;

final public static int REQUEST_CODE_ASK_CAMERA = 125;//相機許可權 final public static int REQUEST_CODE_ASK_PHOTOS = 126;//相簿許可權 public PermissionTool(Context context) { this.context = context; }

//動態獲取相機許可權 public boolean onCamera(){

if (Build.VERSION.SDK_INT >= 23) { int checkCallPhonePermission = ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA);

//注意這裡是用於判斷app是否以獲取到了相應的許可權,若沒有。則申請獲取。其中REQUEST_CODE_ASK_CAMERA相當於識別碼,用於告訴Activity動態獲取了相機許可權,方便在Activity的onRequestPermissionsResult回撥方法

if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions((Activity) context,new String[]{Manifest.permission.CAMERA},REQUEST_CODE_ASK_CAMERA); return false; }else{ //上面已經寫好的撥號方法 return true; } } else { //上面已經寫好的撥號方法 return true; }}//動態獲取相簿許可權public boolean onPhotos(){ if (Build.VERSION.SDK_INT >= 23) {

int checkCallPhonePermission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE); if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions((Activity) context,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_CODE_ASK_PHOTOS); return false; }else{ return true; } } else { return true; } }

}

2、接下來就是呼叫

直接在需要的地方呼叫

PermissionTool permissionTool=new PermissionTool(this);

if(permissionTool.onCamera()){

//如果返回是true說明已有許可權直接寫你的邏輯程式碼

//如果返回是false,這時候Activity會在使用者動態賦予app許可權之後自動呼叫onRequestPermissionsResult()這個方法

}

//動態許可權獲取返回 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) {//根據requestCode判斷獲取的是哪個許可權,以便進行相應的處理 case REQUEST_CODE_ASK_PHOTOS://相簿許可權以獲取 break; case REQUEST_CODE_ASK_CAMERA://相機許可權以獲取 break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }

BUT:

部分情況下可能會出現即使使用了onRequestPermissionsResult()之後,但在使用者動態給了許可權之後沒用執行改方法

此時我們只需要讓Activity繼承ActivityCompat.OnRequestPermissionsResultCallback這個介面。