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

感謝您的解釋。這有很大幫助。 –