Android6.0 許可權申請
阿新 • • 發佈:2021-02-06
APP執行在Android 6.0 (API level 23)
或者更高級別的裝置中,而且targetSdkVersion>=23
時,系統將會自動採用動態許可權管理策略
public void checkPermission() { int targetSdkVersion = 0; String[] PermissionString={Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE}; try { final PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0); targetSdkVersion = info.applicationInfo.targetSdkVersion;//獲取應用的Target版本 } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //Build.VERSION.SDK_INT是獲取當前手機版本 Build.VERSION_CODES.M為6.0系統 //如果系統>=6.0 if (targetSdkVersion >= Build.VERSION_CODES.M) { //第 1 步: 檢查是否有相應的許可權 boolean isAllGranted = checkPermissionAllGranted(PermissionString); if (isAllGranted) { return; } // 一次請求多個許可權, 如果其他有許可權是已經授予的將會自動忽略掉 ActivityCompat.requestPermissions(this, PermissionString, 1); } } } /** * 檢查是否擁有指定的所有許可權 */ private boolean checkPermissionAllGranted(String[] permissions) { for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { // 只要有一個許可權沒有被授予, 則直接返回 false return false; } } return true; } //申請許可權結果返回處理 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1) { boolean isAllGranted = true; // 判斷是否所有的許可權都已經授予了 for (int grant : grantResults) { if (grant != PackageManager.PERMISSION_GRANTED) { isAllGranted = false; break; } } if (isAllGranted) { // 所有的許可權都授予了 } else { // 彈出對話方塊告訴使用者需要許可權的原因, 並引導使用者去應用許可權管理中手動開啟許可權按鈕 //容易判斷錯 //MyDialog("提示", "某些許可權未開啟,請手動開啟", 1) ; } } }
呼叫程式碼