SecurityException:未找到来自 ACTION_IMAGE_CAPTURE 的 uri 的持久权限授予

SecurityException: No persistable permission grants found for uri from ACTION_IMAGE_CAPTURE

我的应用使用相机拍照并长期使用。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri resultUri = null;
resultUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
      new ContentValues());
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, resultUri);
startActivityForResult(imageCaptureIntent, IMAGE_CAPTURE_REQUEST_CODE);

但是当我调用 takePersistableUriPermission() 时,我会得到 SecurityException: No persistable permission grants found

我读过这个 Getting Permission Denial Exception。 它非常适合 ACTION_OPEN_DOCUMENT。 如何获得相机的永久许可?

MediaStore URI 的访问仅受存储权限(即 READ_EXTERNAL_STORAGE)的控制,因此只要您继续持有存储权限,就可以访问 Uris,因此在这种情况下您根本不需要保留权限。

URI based permissions, used in ACTION_GET_CONTENT, ACTION_OPEN_DOCUMENT, etc. give special one time access to a URI via the FLAG_GRANT_READ_URI_PERMISSION 包含在返回的 Intent.

它只是文档 URI(其中 DocumentsContract.isDocumentUri() returns true) that allow you to persist permissions 提供对 Uri 的更永久访问权限。