1

Meine App verwenden Kamera, um ein Foto zu machen und es für lange Zeit zu verwenden.SecurityException: Keine persistierbare Erlaubnis gewährt für URI von 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); 

Aber wenn ich takePersistableUriPermission() aufrufen, werde ich Security erhalten: Keine persistierbar Erlaubnis gewährt

gefunden

Ich habe diese gelesen Getting Permission Denial Exception. Es funktioniert perfekt zu ACTION_OPEN_DOCUMENT. Wie bekomme ich eine dauerhafte Erlaubnis von Camera?

+1

Sie haben die URI - warum müssen Sie den Zugriff überhaupt beibehalten? – ianhanniballake

+0

@ianhanniballake Wow. Du hast recht. Nach dem Neustart, URI von der Kamera kann ohne dauerhafte Erlaubnis zugegriffen werden. Aber warum schlägt es fehl, von ACTION_GET_CONTENT zu uriieren, wenn ich takePersistableUriPermission() nicht aufruft? –

Antwort

3

Zugriff auf MediaStore URIs werden nur durch die Speicherberechtigungen gesteuert (dh READ_EXTERNAL_STORAGE). Solange Sie die Speicherberechtigung behalten, können Sie auf die Uris zugreifen. In diesem Fall müssen Sie keine Berechtigungen beibehalten alle.

URI based permissions, verwendet in ACTION_GET_CONTENT, ACTION_OPEN_DOCUMENT usw. geben spezielle gleichzeitig Zugriff auf einen URI über den FLAG_GRANT_READ_URI_PERMISSION mit dem zurück Intent eingeschlossen sind.

Es sind nur Dokument-URIs (solche, in denen DocumentsContract.isDocumentUri() Wahr zurückgibt), die es Ihnen ermöglichen, persist permissions dauerhafteren Zugriff auf einen Uri zu geben.

+0

Danke für die Erklärung. Das hilft sehr. –