La superficie de la cámara Android se cambió constantemente

Estoy desarrollando una aplicación que utiliza la cámara. He hecho la clase de vista previa como esto:

public class MyPreview extends SurfaceView implements SurfaceHolder.Callback, Camera.Preview Callback{ ... public void surfaceCreated(SurfaceHolder holder){ ... mCamera.setPreviewCallback(this); ... } public void surfaceDestroyed(SurfaceHolder holder){ ... } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ ... } public void onPreviewFrame(byte[] data, Camera camera){ ... } } 

Básicamente, es el ejemplo de CameraDemo. Ejemplo de Android CameraDemo

El problema es que surfaceCreated se llama una sola vez (como debería), pero surfaceChanged está siendo constantemente llamado (en lugar de sólo una vez, o cuando la superficie cambia), y creo que esta es la razón por la que onPreviewFrame nunca se llama. La alimentación de la cámara se muestra en la pantalla y parece que funciona bien, pero en realidad no lo es.

Lo curioso es que funciona bien en Android 2.x, y los problemas sólo surgen en Android 4.1. (No lo he probado en otros dispositivos)

He estado buscando alrededor y creo que puede ser la verdadera razón detrás de este stackoverflow cuestión sin resolver y esta otra cuestión de stackoverflow no resuelto y este caso de code.google . Este último caso tiene una "solución", pero no funcionó para mí.

Por lo tanto, cualquier idea de por qué surfaceChanged se está entrando todo el tiempo y cómo resolverlo?

Pruebe estos tutoriales http://android-er.blogspot.ru/2010/12/implement-takepicture-function-of.html . También intentar looing en artículos anteriores del ciclo.

  • Temporizador de rectángulo de dibujo de Android con animación
  • LAYER_TYPE_SOFTWARE causa que WebView cargue la página en blanco
  • Ajustar dinámicamente la altura de los encabezados de grupo en un ExpandableListView
  • ¿Hay problemas en la vista Web de Android para SVG? Nivel API 16 +
  • Desarrollo de Android: ¿Cómo puedo hacer un texto de edición sencilla por lo que es sólo un cuadrado blanco?
  • Uso de dos diseños diferentes para elementos secundarios en ExpandableListView
  • WebViewClient no se puede resolver con un tipo
  • Cómo borrar la vista creada dinámicamente de la memoria?
  • Detección de vistas invisibles en un evento de movimiento
  • Problema de estilo al superponer getDropDownView en ArrayAdapter
  • Android Canvas.drawTextOnPath no parece correcto cuando la pintura se establece en Stroke
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.