2011-01-08 4 views
7

Ich bin mitGibt es eine Möglichkeit, das von der Kameraaktivität im internen Speicher zurückgegebene Bild in voller Größe zu speichern?

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(externalFileObj)); 

Absicht Standard-Kamera-Aktivität zu nennen. Um das vollständige Bild zu erhalten, müssen Sie intention.putExtra() angeben. Dies erfordert jedoch immer einen URI, der nur für externe Speicherdateien funktioniert.

I versucht, ein temp.jpg Bild im internen Speicher zu erzeugen und seine URI

Uri.fromFile(new File(getFilesDir() + "/temp.jpg")); 

aber die Kamera passieren Aktivität wird nicht wieder zurück, nachdem das Bild erfasst wird.

So gibt es keine Möglichkeit, Bild in voller Größe von Standard-Kamera-Anwendung in unserer Tätigkeit zu erhalten, ohne externen Speicher zu verwenden? Angenommen, das Gerät hat keine SD-Karte oder wird derzeit verwendet, kann ich es nicht vermeiden?

Ja ich weiß, wir können unsere eigene Kamerapreview-Oberfläche erstellen, aber ich möchte die Standard-Kamera-Anwendung verwenden, wie es natürlich ist mit vielen weiteren Optionen.

Danke.

Antwort

1

Ah! Ich hab es geschafft. Ihr Dateiverzeichnis im internen Speicher ist standardmäßig privat und von externen Apps nicht beschreibbar (zB Kamera-App ist externe App)

Erstellen Sie einfach ein neues Verzeichnis im schreibbaren Modus in Ihrem Anwendungsbereich (interner Speicher) und übergeben Sie diesen URI an die Kamera Aktivität. Und alles funktioniert gut. Kein Bedarf an externem Speicher vorhanden zu sein. Getestet und funktioniert gut.

+1

Nur hinzufügen, Sie werden immer noch nicht zufrieden sein, wenn Sie Root-Berechtigungen haben. Da das von der Kameraaktivität im internen Speicherordner zurückgegebene Ergebnisbild eine andere Berechtigungsgruppe (-rwxrwx ---) hat und Ihre App nicht darauf zugreifen kann, obwohl es sich in Ihrem Anwendungsbereich und in Ihrem eigenen erstellten Ordner befindet! – Pritam

+2

Können Sie sagen, wie kann man Root-Berechtigungen erhalten und wie kann ich ein neues Verzeichnis im schreibbaren Modus erstellen? Ich habe das gleiche Problem ... –

+0

Root-Erlaubnis sind eine Art von Benutzer hacken sein Handy für zusätzliche Privilegien. Als Entwickler rate ich davon ab, solche Fälle nicht anzunehmen, wenn Sie beabsichtigen, eine App im Android Market zu veröffentlichen und nicht nur eine begrenzte Zielgruppe, die Droiden bewurzelt haben, ansprechen möchten. Auch das ist ziemlich ältere Post nicht sicher, ob neuere APIs einen Ausweg bieten. – Pritam

0

Ich habe gerade verwendete Code wie folgt aus:

mTempFilePath = File.createTempFile("myappprefix_", ""); 
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempFilePath)); 

Gibt es einen Grund, warum es in den internen Speicher zu sein hat? Ich würde erwarten, dass nur Handys wie das HTC Incredible (welches einen internen Fotospeicher hat) in der Lage sein würde, Fotos intern zu speichern.

+0

Grund für die interne Speicherung ist, dass die Bilder von der Kamera vertraulich sind und nur für meine Anwendung verwendet/angezeigt werden. Die Verwendung von externem Speicher bietet keine Möglichkeit, dass Bilder von anderen Apps oder Benutzern nicht zugänglich sind. Ich habe dafür keinen anderen Bereich als internen Speicher gefunden. Wenn jemand einen Weg kennt, lass es mich wissen. – Pritam

+0

Es scheint so, als würde Ihre einzige Wette darin bestehen, das Foto auf einem externen Speicher zu speichern und es dann in eine sichere Lösung zu verschieben, die Sie verwenden, um die anderen Daten in Ihrer Anwendung zu sichern. Beachten Sie, dass es einige Telefone gibt, die automatisch ein mit der Kameraaktivität aufgenommenes Bild in die Telefongalerie einfügen, auch wenn Sie dies nicht verlangt haben. Ich versuche mich genau zu erinnern, auf welchen Telefonen ich das gesehen habe - vielleicht den Droiden Eris und ein paar andere SenseUI-Telefone? – jjb

+0

Danke für diese Information. Die Kameraaktivität ist also nicht weiser, da sie immer noch eine Kopie davon behalten kann. Momentan ist es genug für mich, dass meine Kopie nicht verändert wird. Sie müssen also eine temporäre Kopie auf dem externen Speicher erstellen und dann wieder in den internen Speicher verschieben. Aber für andere Fälle von Vertraulichkeit bedeutet dies, dass wir uns nicht auf Standard-Apps verlassen können. Lass es mich wissen, wenn du dich an die Telefone erinnerst, die das tun. – Pritam

Verwandte Themen