permission - open camera android developer
SurfaceView con vista previa de la cámara no se destruye (3)
private SurfaceHolder.Callback mSurfaceHolderListener = new SurfaceHolder.Callback() {
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e("TABACT", "surfaceDestroyed()");
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
Tengo una actividad de pestañas con 2 pestañas (actividades). Cada pestaña tiene una escena 3D Open GL dibujada en la parte superior de un SurfaceView con vista previa de la cámara.
Sin embargo, dependiendo de la orientación del dispositivo, las pestañas se cambian.
El problema es que cuando se inicia la otra actividad, llama a camera.open (), que genera una excepción, diciendo que el servicio de la cámara no está disponible.
De hecho, el problema es que la cámara no se detiene cuando la actividad está en pausa, en otras palabras, en SurfaceStroyed () no se llama para SurfaceView. Intenté detener la cámara cuando se llama a OnPause () para actividades, pero sigo teniendo el mismo error.
¿Alguien tenía los mismos problemas con las actividades con pestañas? ¿Alguna idea de cómo hacer que Surfaceview sea destruido?
Parece que esta pregunta es bastante popular, así que estoy agregando la solución aquí una vez más.
La causa principal era que SurfaceDestroyed nunca se llamó para SurfaceView cuando se pausó la aplicación.
Así que creé un framelayout que contiene todas las vistas secundarias. Establecerlo como vista de contenido. Sin embargo, detenga la cámara simplemente llamando a setVisibility (View.GONE) en onPause () y View.Visible en onResume (). Esto conducirá a la destrucción de SurfaceView.
esto está bien para mí:
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e("TABACT", "surfaceDestroyed()");
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}