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!! =)