2017-09-18 2 views
1

Ich verwende cordova Version 7.0.1 und die cordova-plugin-camera Version 2.4.1. navigator.camera.getPicture (successFunction, failureFunction, Optionen) In den Optionen, verwende ichcordova kann fileURL nicht öffnen, das vom Kamera-Plugin zurückgegeben wurde, nachdem die Anwendung neu gestartet wurde

destinationType: Camera.DestinationType.FILE_URI 
sourceType: Camera.PictureSourceType.PHOTOLIBRARY 

Ich erhalte die Bild-URI richtig. Ich erstelle ein "img" -Element und setze die Datei img.src auf den vom Plugin zurückgegebenen URI Das Bild wird korrekt angezeigt. Jetzt speichere ich diesen URI im lokalen Ordner der Anwendung und schließe die Anwendung. Ich starte die Anwendung neu und lese die imageURI aus dem Speicher. Dann erstelle ich ein "img" -Element und setze die Datei img.src auf den URI-Formularspeicher.

Der aus dem Speicher gelesene URI ist identisch mit dem zuvor vom getPicture() - Aufruf der Kamera-Plug-in zurückgegebenen URI. Aber die Bilddatei wird nicht gelesen und das Bild erscheint nicht auf dem Bildschirm. Die Fehler ich sehe sind kann nicht Content-URL öffnen:

Inhalt: //com.android.providers.media.documents/document/image%3A3237 von weißen Liste blockiert URL: Inhalt: // com. android.providers.media.documents/document/image% 3A3184

Also dachte ich, das war ein Whitelist-Problem. Ich habe in die Datei config.xml hinzugefügt. Dies führt jedoch zum Absturz der App, wenn sie versucht, die Bilddatei zu lesen.

Ich versuche dies auf einem Karbonn Telefon mit Android Marshmallow.

Bitte teilen Sie die Lösung, wenn Sie wissen, was mit dem oben genannten falsch ist, was ich hier noch tun muss.

+0

Bei der Verwendung von Camera.DestinationType.FILE_URI speichert die Kamera Bilder im Cache-Ordner mit Android und im tmp-Ordner mit ios standardmäßig. Soweit mir bekannt ist, wird der tmp (temporär) -Ordner mit ios manchmal und vor allem nach dem Neustart gelöscht, so dass bei Android ein ähnliches Problem auftreten kann. Haben Sie versucht, ein Bild in Ihren App-Ordner zu verschieben (file: /// storage/emulated/0/Android/data/YOUR_APP_NAMESPACE_H ERE) und lesen Sie es dort nach dem Neustart? – Blauharley

+0

Danke für die Antwort, Blaufarley. Aber - ich denke, das ist nicht der Grund für das Problem, das ich habe. Ich mache kein neues Bild mit der Kamera (sourceType: Kamera). Ich verwende das Plugin, um ein Bild von der Photolibrary zu holen (sourceType: photolibrary). Und ich kann sehen, dass der Dateiname (URI) kein "Cache" ist, sondern im "content" -Ordner des Telefons. –

+0

Ok, entschuldigung ...... Ich hatte auch ein ähnliches Problem und löste es, indem ich eine Anfrage an einen bestimmten Ordner (window.requestFileSystem) machte, bevor eine Datei dort gespeichert werden konnte. Hast du das schon probiert, bevor du ein img-Element erstellst? – Blauharley

Antwort

0

Es scheint, wenn ein Bild von einem "Media-Store" wie die Galerie zugreifen ohne "eine bestimmte System-App" wie die Kamera, eine gewöhnliche App muss die Erlaubnis android.permission.MANAGE_DOCUMENTS halten, um Zugriff auf das Bild zu haben.

Leider haben normale Apps diese Berechtigung nicht, wie diese answer sagt. Dazu muss ein Galeriebild in den App-Ordner (file:///storage/emulated/0/Android/data/APP_NAMESPACE) verschoben werden, indem eine "System-App" verwendet wird, die die android.permission.MANAGE_DOCUMENTS -Permission enthält, so dass eine normale App dieses Bild nach einem Neustart anzeigen kann.

Verwandte Themen