1

我的应用使用相机拍摄照片并长期使用它。SecurityException:未从ACTION_IMAGE_CAPTURE发现uri的持久权限授予

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:没有持久化的权限授予发现

我读过这个 Getting Permission Denial Exception。 它完美适用于ACTION_OPEN_DOCUMENT。 如何从相机获得持久性许可?

+1

你有URI - 你为什么需要坚持访问呢? – ianhanniballake

+0

@ianhanniballake哇。你是对的。重新启动后,可以在没有持续许可的情况下访问摄像机的uri。但是,如果我没有调用takePersistableUriPermission(),为什么它不能从ACTION_GET_CONTENT中返回? –

回答

3

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

URI based permissions,在ACTION_GET_CONTENT使用,ACTION_OPEN_DOCUMENT等给经由FLAG_GRANT_READ_URI_PERMISSION特殊一次访问URI被包括与所述返回Intent

只有文档URI(其中DocumentsContract.isDocumentUri()返回true)允许您对persist permissions给予更多的永久访问Uri。

+0

感谢您的解释。这有很大帮助。 –