Android 許可權申請java/kotlin
阿新 • • 發佈:2021-12-22
java
private static List<String> sPermissions = new ArrayList<String>(){}; private static int MAX_NUMBER_REQUEST_PERMISSIONS = 2; private static int REQUEST_CODE_PERMISSIONS = 101; private int permissionRequestCount = 0; private boolean hasPermissions = false; /** * 許可權申請*/ private void requestPermissionsIfNecessary() { hasPermissions = checkAllPermissions(); if (!hasPermissions) { if (permissionRequestCount < MAX_NUMBER_REQUEST_PERMISSIONS) { permissionRequestCount += 1; ActivityCompat.requestPermissions(this, sPermissions.toArray(new String[0]), REQUEST_CODE_PERMISSIONS); } else { } } } /** * 許可權回撥 onActivityResult已經廢棄 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CODE_PERMISSIONS) { requestPermissionsIfNecessary(); } } /** * 許可權檢查 * @return 許可權是否申請 */ private Boolean checkAllPermissions() { boolean hasPermissions = true; for (String permission : sPermissions) { hasPermissions = hasPermissions & (ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED); } return hasPermissions; }
kotlin
第一種參考上面Java程式碼
第二種適合單一許可權申請
//註冊許可權回撥,它處理使用者對系統許可權對話方塊的響應。 儲存返回值,ActivityResultLauncher 的一個例項。 // 您可以使用此程式碼段中所示的 val,也可以在 onAttach() 或 onCreate() 方法中使用 lateinit var。 private val requestPermissionLauncher = registerForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted: Boolean -> if (isGranted) { // 已授予許可權 } else { // 許可權請求被拒絕。 } } requestPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)