Android6.0以上獲取動態許可權
阿新 • • 發佈:2018-11-09
在執行時請求許可權
從 Android 6.0(API 級別 23)開始,使用者開始在應用執行時向其授予許可權,而不是在應用安裝時授予。此方法可以簡化應用安裝過程,因為使用者在安裝或更新應用時不需要授予許可權。它還讓使用者可以對應用的功能進行更多控制;例如,使用者可以選擇為相機應用提供相機訪問許可權,而不提供裝置位置的訪問許可權。使用者可以隨時進入應用的“Settings”螢幕呼叫許可權。
系統許可權分為兩類:正常許可權和危險許可權:
- 正常許可權不會直接給使用者隱私權帶來風險。如果您的應用在其清單中列出了正常許可權,系統將自動授予該許可權。
- 危險許可權會授予應用訪問使用者機密資料的許可權。如果您的應用在其清單中列出了正常許可權,系統將自動授予該許可權。如果您列出了危險許可權,則使用者必須明確批准您的應用使用這些許可權。
1.檢查應用是否獲取許可權
呼叫 ContextCompat.checkSelfPermission()
方法檢查許可權
如果應用具有此許可權,方法將返回 PackageManager.PERMISSION_GRANTED
,並且應用可以繼續操作。
如果應用不具有此許可權,方法將返回 PERMISSION_DENIED
,且應用必須明確向用戶要求許可權。
如果您的應用需要危險許可權,則每次執行需要這一許可權的操作時您都必須檢查自己是否具有該許可權。使用者始終可以自由呼叫此許可權,因此,即使應用昨天使用了相機,它不能假設自己今天仍具有該許可權
獲取相機拍照許可權的示例:
if (ContextCompat.checkSelfPermission(MyInfoActivity.this, Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){ //獲取拍照許可權 ActivityCompat.requestPermissions(MyInfoActivity.this,new String[]{Manifest.permission.CAMERA},CAMERA_PERMISSION_CODE); }else { //許可權已有,可以拍照了! selectCamera(); }
2.獲取許可權的方法
呼叫一個 requestPermissions()
方法;
例如:
ActivityCompat.requestPermissions(MyInfoActivity.this,new String[]{Manifest.permission.CAMERA},CAMERA_PERMISSION_CODE);
第一個引數:上下文;第二個引數:許可權組(可同時註冊一組許可權);第三個引數:請求碼;
3.處理許可權請求響應
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case CAMERA_PERMISSION_CODE:
ToastUtils.showImageToast(MyInfoActivity.this,"許可權申請OK!");
break;
}
}