La vista previa de la cámara se bloquea después del bloqueo de la pantalla
La aplicación de cámara personalizada que he escrito deja de dar la vista previa después de bloquear la pantalla (pulsando bloqueo butten o esperar un par de minutos). No tengo una excepción, lo que hace bastante difícil encontrar el problema.
¿El bloqueo de pantalla de Android (si es el término correcto) pausa / interrumpe / … mi aplicación (actividad)?
- Error al invalidar el método toString
- Cómo ofuscar con ProGuard pero mantener los nombres legibles durante la prueba?
- Cómo corregir el movimiento suave del marcador en google maps v2?
- La autenticación mutua de SSL FAIL en Android Client acepta el certificado de servidores pero el servidor no obtiene el certificado de cliente
- La casilla de verificación de Android marcada en una actividad y luego el botón aparece en otra actividad
Si este fuera el caso, ¿podría la causa ser mis métodos onPause / onResume? ¿O es otra causa más probable?
Gracias por adelantado
- La página de registro de usuario no valida
- ¿Cómo puedo instalar un apk en varios dispositivos conectados?
- Ráfaga de captura de cámara de Android2 es demasiado lento
- Eclipse android sdk bundle no puede abrir Android SDK Manager
- La actividad de Android se reinicia cuando cambia la orientación
- ListView - getView se llama demasiadas veces
- JUnit UnsatisfiedLinkError: android.util.Log.isLoggable (Ljava / lang / String;
- Login Facebook registerCallback no llamado
Me enfrenté al mismo problema y lo arregló con los siguientes pasos:
-
He creado mi vista previa de la cámara y lo he añadido al contenedor FrameLayout en onResume () de la actividad principal. Algo como:
public void onResume{ super.onResume(); mCamera = Camera.open(); if(null != mCamera){ mCamera.setDisplayOrientation(90); mPreview = new CameraOverlay(getActivity(), mCamera); frLyParent.addView(mPreview); } }
-
Quité la vista en onPause (). Esto corrige la congelación.
public void onPause(){ super.onPause(); if(null != mCamera){ mCamera.release(); mCamera = null; } frLyParent.removeView(mPreview); mPreview = null; }
Donde CameraOverlay () es la clase que extiende SurfaceView y implementa SurfaceHolder.Callback. Hágame saber si necesita esa implementación.
Gracias, he usado una modificación de esto y funciona para mí también
He añadido mPreview.removeView(mPreview.mSurfaceView);
En onpause()
, y mPreview.addView(mPreview.mSurfaceView);
onResume()
antes de abrir la cámara.
También addView(mSurfaceView);
En la clase de vista previa.
Aquí está el mío, funciona 🙂
@Override public void onResume() { super.onResume(); try { camera = Camera.open(); holder.addCallback(this); surface.setVisibility(View.VISIBLE); } catch (Exception e) { e.printStackTrace(); } } @Override public void onPause() { try { surface.setVisibility(View.GONE); holder.removeCallback(this); camera.release(); } catch (Exception e) { e.printStackTrace(); } super.onPause(); }
En el método onResume()
agregue esta línea:
surfaceView.setVisibility(View.VISIBLE);
En el método onPaused()
agregue esta línea:
surfaceView.setVisibility(View.GONE);