Android (Kamera) - Wie synchronisiere ich stopPreview () mit onPictureTaken ()?

Ich habe eine App, in der der Client die Kamera verwendet, um ein Bild aufzunehmen. Die Vorschau des Bildes wird in einem SurfaceView auf dem Tablet angezeigt, bevor die Person auf die Schaltfläche "Klicken" klickt. Wenn die Person auf die Schaltfläche klickt, wird die Methode onPictureTaken aufgerufen. Bei dieser Methode speichere ich das Bild und rufe auch die camera.stopPreview () -Methode auf (sodass der Benutzer das aufgenommene Bild sehen kann).

Es gibt jedoch ein Problem ... Wenn sich der Benutzer zum Zeitpunkt der Aufnahme auf dem Tablet bewegt,Das Standbild, das tatsächlich nach der Methode stopPreview angezeigt wird, heißt DOES NOT und entspricht dem, das ich im Byte-Array der Methode onPictureTaken erhalte. Es gibt eine Verzögerung von einigen Millisekunden, in der sich der Unterschied bemerkbar macht, wenn sich der Benutzer kurz vor der Aufnahme auf dem Tablet bewegt (ich weiß, dass 99% der Leute das Tablet während der Aufnahme nicht bewegen, aber mein Kunde hat dieses Problem tatsächlich bemerkt und möchte, dass es behoben wird ...). Ich habe versucht, den Speichervorgang wie unten gezeigt in einen separaten Thread zu verschieben, damit die onPictureTaken-Methode so schnell wie möglich ausgeführt werden kann. Trotzdem hatte es überhaupt keine Wirkung ...

private PictureCallback pictureCallback = new PictureCallback() {

    public void onPictureTaken(byte[] data, Camera camera) {

        camera.stopPreview();
        reference = data;

        new PictureCallbackHeavy().execute();
    }
};

Ich muss auch camera.stopPreview () aufrufen, bevor ich die takePicture-Methode aufrufe (und nicht innerhalb der onPictureTaken () -Methode). Das Ergebnis ist jedoch dasselbe.

Was kann ich tun, um die stopPreview-Methode so zu synchronisieren, dass ich GENAU das Bild anzeigen kann, das aufgenommen wurde und das sich im Byte-Array des onPictureTaken () -Rückrufs befindet?

Danke im Voraus!! =)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage