Android (Camera) - Como sincronizar stopPreview () com onPictureTaken ()?

Eu tenho um aplicativo em que o cliente usa a câmera para tirar uma foto. A pré-visualização da imagem está sendo mostrada no tablet usando um SurfaceView, antes que a pessoa aperte o botão "clique". Quando a pessoa clica no botão de clique, o método onPictureTaken é chamado e, nesse método, eu salvo a imagem e também chamo o método camera.stopPreview () para que o usuário possa ver a foto que foi tirada.

Há um problema, no entanto ... Se o usuário estiver se movimentando no tablet no momento em que a foto é tirada,a imagem estática realmente mostrada depois que o método stopPreview é chamado NÃO corresponde ao que recebo na matriz de bytes do método onPictureTaken. Há um atraso de alguns milissegundos em que isso faz a diferença de se destacar quando o usuário está se movendo pelo tablet pouco antes de a foto ser tirada (sei que 99% das pessoas não moverão o tablet enquanto tiram a foto, mas meu cliente realmente notou esse problema e quer que seja corrigido ...). Eu tentei mover a operação de salvar para um segmento separado, como mostrado abaixo, para que o método onPictureTaken possa executar o mais rápido possível. Ainda assim, não teve efeito algum ...

private PictureCallback pictureCallback = new PictureCallback() {

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

        camera.stopPreview();
        reference = data;

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

Eu também tenho trield para chamar camera.stopPreview () apenas antes de chamar o método takePicture (e não dentro do método onPictureTaken ()). Mas o resultado é o mesmo.

O que posso fazer para sincronizar o método stopPreview para que eu possa mostrar EXATAMENTE a imagem que foi tirada e que está na matriz de bytes do retorno de chamada onPictureTaken ()?

Agradeço antecipadamente!! =)

questionAnswers(1)

yourAnswerToTheQuestion