2010-10-18 9 views
5

Ich benutze die Kamera des Telefons in einer Android-App, um ein Foto zu machen. Ich verwende Intents die eingebaute Kamera-Anwendung zu verwenden, und ich bin mit dem folgenden Code:Telefonkamera über Intent verwenden - Aktivität kehrt nie zurück?

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(FILEPATH))); 
startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE); 

Es funktioniert gut, und die Kamera gebracht. Ich kann ein Foto machen und das Telefon zeigt mir drei Optionen: Abbrechen, Wiederholen, OK. Die ersten beiden arbeiten, drücken Abbrechen kehrt der Benutzer zur App, aber drücken Sie OK und nichts geschieht. Anscheinend wird onActivityResult nicht aufgerufen, und die Kamera bleibt einfach auf dem Bildschirm. Nichts im Debugger.

Ausführen der App auf einem Nexus One mit Android 2.2.1. Das gleiche Problem auf dem Emulator mit Android 2.0.

Bearbeiten: Getestet auf einem HTC Desire mit Android 2.2 mit HTC Sense UI: funktioniert perfekt. Nichts auf dem Emulator noch Google N1.

EDIT2: Es scheint, dass das HTC Desire Bild aquiring Aktivität funktioniert besser in dem Sinne, dass sie zurückkehrt, aber es ignoriert die EXTRA_OUTPUT -Einstellung und gibt nur ein kleines Bild in der onActivityResult -Aufruf. Wenn ich auf der ddms-Konsole nachschaue, während das Telefon an den Computer angeschlossen ist, sehe ich, dass das Telefon das Bild auf der SD-Karte speichert, aber der Pfad wird nicht an meine Anwendung zurückgegeben. Es sieht so aus, als ob es keinen zuverlässigen Weg gibt, die Absicht der Kamera zu nutzen und ein Bild von vernünftiger Größe zurück zu bekommen. Schlecht schlecht schlecht.

Antwort

1

Nach ein wenig Forschung, Tests und Glück konnte ich dieses Problem lösen.

Wenn die Option EXTRA_OUTPUT für den Intent einen Datei-URI enthält, der auf den internen Speicher des Geräts verweist, schlägt der Aufruf fehl. Wie es scheitert, hängt vom Gerät ab. Das HTC Desire funktioniert auf der Oberfläche einwandfrei, es wird jedoch nicht das Bild in Originalgröße zurückgegeben. Google N1 weigert sich dagegen, die Kameraaktivität zu verlassen.

Wenn ich den Datei-URI geändert habe, um auf die Speicherkarte zu zeigen, funktionierte es perfekt für Desire und Google N1.

Also summiert es sich: der Pfad zum Speichern des Bildes in voller Größe muss auf die SD-Karte zeigen.

+0

So gibt es keine Möglichkeit, SD-Karte zu vermeiden? Wenn es nicht verfügbar ist, dann können Sie kein Bild in voller Größe erhalten? Ich stehe vor einem ähnlichen Problem. Hier ist mein Beitrag http://stackoverflow.com/questions/4632231/is-there-any-way-to-store-full-size-image-returned-from-camera-activity-in-intern – Pritam

Verwandte Themen