2012-08-09 8 views
5

Ich baue eine Android App, wo ich auf die PictureCallback warten möchte, bevor die aufrufende Aktivität fortgesetzt wird.'Pause' Aktivität beim Warten auf PictureCallback

import android.hardware.Camera; 

private Camera camera 
private Bitmap picture; 

camera.takePicture(null, null, new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 1; 
    picture = BitmapFactory.decodeByteArray(data , 0, data.length, options); 
    } 
} 

... do some other logic with picture 

Ich möchte die andere Logik getrennt halten und so würde ich gerne diese in der Takepicture Funktion vermeiden Codierung.

Ist es möglich, dies zu erreichen?

+0

Ich versuche genau dasselbe zu tun. Gute Frage. –

Antwort

0

Es ist eine schlechte Übung, den UI-Thread zu blockieren, während Sie im Hintergrund arbeiten.

Wenn Sie die eingebaute Kameraaktivität aufrufen, befindet sich Ihre Aktivität im Hintergrund. Nachdem Sie das Bild aufgenommen haben und die Kameraaktivität beendet ist, wird das Bild bereits gespeichert, wenn Sie zu Ihrer Aktivität zurückkehren.

Wenn Sie Ihre eigene Camera Implementierung verwenden, sollten Sie eine ProgressDialog anzeigen und wenn Sie Hintergrundarbeit zu tun haben, sollten Sie es in einem separaten Thread tun.

+0

Ich benutze tatsächlich meine eigene Kamera-Implementierung. Ich sehe nicht, wie die Verwendung eines ProgressDialogs dieses Problem beheben könnte. Die Art und Weise der Code ausgeführt wird, ist wie folgt: 1) nimmt Bild 2) tun, um die nächsten logischen 3 Callback-Bild zurückzugibt) Ich würde es in folgenden Reihenfolge mag: 1 3 2 – Gillain

+1

ich falsch verstand Ihre Frage so scheint es. Aber dann kannst du einfach deine 2) in eine separate Methode schreiben und am Ende der Callback-Funktion aufrufen. –

+0

Danke für Ihre schnelle Antwort. Ihr Vorschlag könnte eine Lösung sein, aber der Grund, warum ich so viele Probleme habe, ist, weil ich versuche, meinen Code so abstrakt wie möglich zu halten. In meinem Projekt habe ich eine Aktivität und eine getrennte Kamera-Klasse. Ich rufe die takePicture-Funktion in der Camera-Klasse auf, die dann auf den Rückruf warten und das Bild an die Aktivität zurückgeben muss. Das Problem besteht darin, dass der Code in der Aktivität NACH dem Aufruf von takePicture ausgeführt wird, bevor der Rückruf die Chance hat, die Bitmap zurückzugeben. Sagen Sie mir, wenn Sie lieber den vollständigen Code sehen möchten. – Gillain

0

Sie könnten es in zwei Threads implementieren. Gleich danach heißt der PictureCallback call wait() auf dem aktuellen Thread. Wenn PictureCallback beendet ist, muss notify() aufgerufen werden, damit der wartende Thread weiß, dass es OK ist. Aber du willst deinen Haupt-Thread nicht blockieren. Sie können, wenn Sie wollen/brauchen, aber es ist keine gute Idee.

+0

Ich habe versucht, die PictureCallback in einem anderen Thread zu implementieren, aber das hat nicht geklappt. Irgendwie werden die Callbacks immer im Hauptthread ausgeführt. – Gillain