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)?

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

Me enfrenté al mismo problema y lo arregló con los siguientes pasos:

  1. 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); } } 
  2. 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); 
  • Error en el registro de Android SIP (-9 IN_PROGRESS)
  • Pruebas de la unidad Android con Dagger 2
  • La pestaña 'Leaderboard` que no se muestra en Google Play Games, mientras que la pestaña `Achievements` está allí
  • Puntero nulo en getApplicationContext ()
  • Adición de la vista de desplazamiento al diseño lineal dinámicamente
  • ¿Por qué los colores de los píxeles no son correctos en OpenGL ES 2.0 en Android?
  • Mejor enfoque con claras edittext
  • Necesidad de formatear moneda para TextView
  • Obtención de error: "mala lectura de inttemp!" Al entrenar una nueva fuente en Tesseract 2
  • Cómo arreglar este código todas las pantallas de Android
  • Android parse String hasta la fecha - carácter de patrón desconocido 'X'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.