Android (Camera) - Jak zsynchronizować stopPreview () z onPictureTaken ()?

Mam aplikację, w której klient używa aparatu do robienia zdjęć. Podgląd obrazu jest wyświetlany na tablecie za pomocą narzędzia SurfaceView, zanim osoba dotknie mojego przycisku „kliknij”. Gdy osoba uderza w przycisk kliknięcia, wywoływana jest metoda onPictureTaken, i w tej metodzie zapisuję obraz, a także wywołuję metodę camera.stopPreview () (aby użytkownik mógł zobaczyć zrobione zdjęcie).

Występuje jednak problem ... Jeśli użytkownik porusza się po tablecie w momencie zrobienia zdjęcia,nieruchomy obraz wyświetlany po wywołaniu metody stopPreview NIE odpowiada temu, który otrzymuję w tablicy bajtów metody onPictureTaken. Występuje opóźnienie o kilka milisekund, które sprawiają, że różnica ta wyróżnia się, gdy użytkownik porusza się po tablecie tuż przed zrobieniem zdjęcia (wiem, że 99% ludzi nie poruszy tabletu podczas wykonywania zdjęcia, ale mój klient rzeczywiście zauważył ten problem i chce go naprawić ...). Próbowałem przenieść operację składowania do wątku separete, jak pokazano poniżej, więc metoda onPictureTaken może zostać wykonana tak szybko, jak to możliwe. Mimo to nie miało to żadnego skutku ...

private PictureCallback pictureCallback = new PictureCallback() {

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

        camera.stopPreview();
        reference = data;

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

Mam także trield do wywołania camera.stopPreview () po prostu ZANIM wywołam metodę takePicture (a nie wewnątrz metody onPictureTaken ()). Ale wynik jest taki sam.

Co mogę zrobić, aby zsynchronizować metodę stopPreview, dzięki czemu mogę pokazać DOKŁADNIE zrobiony obraz i to w tablicy bajtów wywołania zwrotnego onPictureTaken ()?

Z góry dziękuję!! =)

questionAnswers(1)

yourAnswerToTheQuestion