ubicacion - La cámara de Android se congela después de tomar una foto
porque no puedo tomar fotos con mi camara de celular (6)
Estoy haciendo un proyecto con la cámara y después de tomar una foto, la cámara se congela y tienes que terminar la actividad y recuperarla para tomar otra foto. ¿Cómo puedo tomar una foto congelada por solo 1-2 segundos y luego ver la superficie para tener la cámara de nuevo. lo mismo para el video Estoy usando la grabadora de medios, tomando video, presione para detener el video y la pantalla aún está activa, pero no puedo volver a tomar el video. ¿Tengo que reiniciar la actividad?
¿Alguien tiene una solución?
En lugar de usar las actividades definidas por la aplicación de cámara existente en su teléfono, puede escribir su propia Actividad que utiliza la API de la cámara directamente para cumplir con la funcionalidad que describe. La clase de cámara se documenta aquí: http://developer.android.com/reference/android/hardware/Camera.html
Encontré una solución para esto: después de tomar una foto, la vista previa se habrá detenido. Para tomar más fotos, llame a camera.startPreview()
nuevo primero.
La cámara se está congelando, porque no está reiniciando la vista previa de la cámara, así que reinicie llamando a camera.startpreview()
La camera.startpreview (); La respuesta no funcionó para mi caso, pero el siguiente código solucionó ese problema y espero que también ayude a otros. Usé un hilo para retrasar el cierre y la apertura de la cámara después de que la foto se capturara a 500 ms.
private void start_camera() {
try {
camera = Camera.open();
// camera.lock();
} catch (RuntimeException e) {
Log.e(tag, "init_camera: " + e);
return;
}
Camera.Parameters param = camera.getParameters();
param = camera.getParameters();
Camera.Size size = param.getSupportedPreviewSizes().get(0);
param.setPreviewSize(size.width, size.height);
camera.setParameters(param);
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
previewRunning = true;
} catch (Exception e) {
Log.e(tag, "init_camera: " + e);
return;
}}
private void captureImage() {
camera.takePicture(shutterCallback,null,jpegCallback);
Thread restart_preview=new Thread(){public void run(){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
camera.release();
camera=null;
start_camera();
}};
restart_preview.start();}
después de capturar la imagen, debe detener la vista previa y volver a iniciarla.
mCamera.stopPreview();
mCamera.startPreview();
funcionaría bien
Hacer cualquier procesamiento de imágenes en un fondo AsyncTask
. Esto permitirá que su actividad de UI continúe y tome otra foto.
Edición: no puedo eliminar una respuesta aceptada, así que vea la respuesta de stoefin a continuación. Llamar a camera.startPreview()
antes de tomar la siguiente foto funciona para él.