Mann, ich bin immer noch nicht in der Lage, ein Bild zu speichern, wenn ich eine Absicht sende, um ein Foto zu machen. Hier ist was ich mache:
Erstellen Sie einen URI, der den Pfadnamen darstellt
%Vor%Erstellen Sie die Absicht (vergessen Sie nicht den Pkg-Namen!) und starten Sie die Aktivität
%Vor% Die Kameraaktivität startet und ich kann ein Foto machen und genehmigen. Mein onActivityResult()
wird dann aufgerufen. Aber meine Datei wird nicht geschrieben.
Der URI lautet: file: ///data/data/com.droidstogo.boom1/files/parked.jpg
Ich kann thumbnail OK erstellen (indem ich das Extra nicht in den Intent lege), und kann diese Datei OK schreiben und später wieder lesen.
Kann jemand sehen, was für ein einfacher Fehler ich mache? Im Logcat zeigt sich nichts Auffälliges - die Kamera macht das Bild klar. Danke,
Peter
Ich sollte erwähnen, dass die entsprechenden Berechtigungen in der Datei AndroidManifest.xml festgelegt sind:
%Vor%Irgendwelche Ideen? Irgendwelche Ideen zu versuchen, um mehr Informationen über das Problem zu bekommen?
Wie Steve H gesagt hat, kann man dafür nicht einfach file: ///data/data/com.droidstogo.boom1/files/parked.jpg verwenden. Es ist Ihre Anwendung privates Verzeichnis und Kamera kann nicht dort schreiben. Sie können zum Beispiel eine SD-Kartendatei verwenden - sie ist für alle verfügbar.
Wie Stealthcopter sagte, ist extra extra nur MediaStore.EXTRA_OUTPUT ohne Ihren Paketnamen.
Kein Problem, nur zur Information. Ich denke, dass keine der von Ihnen angegebenen Berechtigungen tatsächlich für diesen Vorgang erforderlich sind.
Hier ist mein Codebeispiel:
%Vor%Liegt es daran, dass Sie einen zusätzlichen Punkt hinzugefügt haben:
%Vor%Anstelle von:
%Vor%Ihr Problem könnte mit dem Verzeichnis zusammenhängen, in dem Sie die Datei speichern möchten. Um Dateien auf der SD-Karte zu speichern, benötigen Sie keine speziellen Berechtigungen, aber die Art und Weise, wie Sie die Ordnerreferenz erhalten, unterscheidet sich von Ihrer habe es getan. Es hängt auch davon ab, ob Sie das Bild auf eine Weise speichern möchten, die vom MediaStore abgerufen werden kann (d. H. Dinge wie die Galerie oder die Albenanwendung oder jede andere App, die auf diese angewiesen ist, um Bilder zu finden). Angenommen, Sie möchten, dass es im MediaStore aufgelistet wird, hier ist der Code, der das macht:
%Vor%Auf meinem Emulator mit Version 1.5 wird erfolgreich eine Bitmap auf der SD-Karte im DCIM / Kamera-Ordner gespeichert, wobei der Dateiname die aktuelle Uhrzeit ist. (Die Zeit wird in Millisekunden seit dem 1. Januar 1970 gespeichert, aus irgendeinem Grund auch als "Epoche" bekannt.)
Wie Steve sagte, sollten Sie Ihr Bild auf Ihrer SD-Karte speichern. Das Verzeichnis, in dem Sie speichern möchten, ist privat und wenn Sie Ihr Gerät nicht verwurzelt haben, können Sie dort nicht schreiben. Versuchen Sie, diese Zeile zu ersetzen:
%Vor%mit dieser Zeile
%Vor%Das sollte genug sein.