2012-08-09 14 views
5

Estoy construyendo una aplicación de Android en la que me gustaría esperar a que ocurra la Recuperación de imagen antes de que continúe la actividad de la llamada.Actividad 'Pausa' mientras espera que ocurra 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 

me gustaría mantener la otra lógica separados y por lo tanto me gustaría evitar la codificación de esta función en el takePicture.

¿Es posible lograr esto?

+0

Estoy tratando de hacer exactamente lo mismo. Buena pregunta. –

Respuesta

0

Es una mala práctica bloquear el subproceso de interfaz de usuario mientras realiza cualquier trabajo en segundo plano.

Si llama a la actividad integrada de la Cámara, su actividad estará en segundo plano. Después de tomar la foto y la actividad de la cámara se cierra, para cuando regrese a su actividad, la imagen ya estará guardada.

Si usa su propia implementación Camera, entonces debería mostrar ProgressDialog y si tiene algún trabajo de fondo que hacer, debe hacerlo en un hilo separado.

+0

Estoy utilizando mi propia implementación de cámara. No veo cómo usar un ProgressDialog podría solucionar este problema. La forma en que se ejecuta el código es el siguiente: 1) tomar la foto 2) hacer la siguiente lógica 3) de devolución de llamada devuelve la imagen me gustaría que en el siguiente orden: 1 3 2 – Gillain

+1

no he entendido bien su pregunta por lo que parece. Pero luego puedes escribir tu 2) en un método diferente y llamarlo al final de la función de devolución de llamada. –

+0

Gracias por su rápida respuesta. Su sugerencia podría ser una solución, pero la razón por la que estoy teniendo tantos problemas es porque trato de mantener mi código lo más abstracto posible. En mi proyecto tengo una actividad y una clase de cámara separada. Llamaré a la función takePicture en la clase Camera, que luego tendrá que esperar la devolución de llamada, y luego devolverá la imagen a la actividad. El problema es que el código en la actividad DESPUÉS de llamar a takePicture se ejecuta ANTES de que la devolución de llamada tenga la posibilidad de devolver el mapa de bits. Dígame si prefiere ver el código completo. – Gillain

0

Puede implementarlo en dos hilos. Luego, justo después de que PictureCallback se llama call wait() en el hilo actual. Luego, cuando PictureCallback haya terminado, llámalo notify() para que el hilo en espera sepa que está bien para finalizar. Pero no quieres bloquear tu hilo principal. Puedes si quieres/necesitas también pero no es una buena idea.

+0

He intentado implementar PictureCallback en un hilo diferente pero eso no funcionó. De alguna manera, las devoluciones de llamada siempre se ejecutan en el hilo principal. – Gillain

Cuestiones relacionadas