SecurityException:未从ACTION_IMAGE_CAPTURE找到关于uri的持久权限授予

Min*_*Lin 3 java android android-camera android-permissions android-securityexception

我的应用程序使用相机拍摄照片并长期使用。

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);
Run Code Online (Sandbox Code Playgroud)

但是,当我调用takePersistableUriPermission()时,将得到SecurityException:找不到持久的权限授予

我已经阅读了此“ 获取权限拒绝异常”。它非常适合ACTION_OPEN_DOCUMENT。如何获得Camera的永久许可?

ian*_*ake 5

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

基于URI的权限,在使用ACTION_GET_CONTENTACTION_OPEN_DOCUMENT等方面给予通过特殊的一次访问URI FLAG_GRANT_READ_URI_PERMISSION被包含在返回Intent

只有文档URI(在其中DocumentsContract.isDocumentUri()返回true的URI )中,您才能保留权限以赋予对Uri的更多永久访问权。

  • 不完全是。如果您要求用户使用“Intent.ACTION_GET_CONTENT”选择文件 - 您收到的 URI 将成功传递“DocumentsContract.isDocumentUri()”,但如果您尝试调用“takePersistableUriPermission()”保存权限,则会失败,并出现异常“SecurityException:找不到 //UID 10829 和 Uri content://...` 的持久权限授予;您应该使用“Intent.ACTION_OPEN_DOCUMENT”打开文件选择器。 (2认同)