Recreando el objeto de la cámara después del error 100 (servidor de la cámara fallecido)

Tengo la aplicación androide clásica con vista previa de la cámara (común implem que se puede encontrar en muchos tutoriales [marakana, etc]) que se supone que tomar la imagen en un intervalo de tiempo dado. Threading y matar hilos se hace, los errores de este tipo "método llamado después de la liberación" se manejan. Pero a veces se produce el error bien conocido 100. Acepté el hecho de que sucede y traté de manejarlo también. Implementé ErrorCallback y su método onError donde se libera el objeto de cámara actual y se instancia una nueva como se escribe en la documentación oficial.

Pero (sin sorpresa) no es suficiente. Nueva cámara es mabybe asignado incorrectamente porque un mensaje "CameraDemo se ha salido inesperadamente" aparece ahora. He leído muchos documentos y ejemplos en la esperanza, que un procedimiento adecuado será en algún lugar explicado, pero nadie tiene tal problema aparentemente. Así que me gustaría preguntar ¿qué más debo hacer al lado de liberar y crear nueva cámara? Aquí está el código:

ErrorCallback CEC = new ErrorCallback() { public void onError(int error, Camera camera) { Log.d("CameraDemo", "camera error detected"); if(error == Camera.CAMERA_ERROR_SERVER_DIED) { Log.d("CameraDemo", "attempting to reinstantiate new camera"); camera.stopPreview(); camera.setPreviewCallback(null); camera.release(); //written in documentation... camera = null; camera = Camera.open(); } } }; 

En breve – si liberar y volver a crear la cámara en la devolución de llamada onError, entonces RuntimeException método llamado después de la liberación (takePicture) se plantea. ¿Debo de alguna manera asignar el soporte de superficie a la cámara de nuevo o recrear el soporte de superficie también?

Sería suficiente para dirigirme, por ejemplo, a algunos foros, donde se describe o resuelto, etc Gracias por cualquier ayuda.

2 Solutions collect form web for “Recreando el objeto de la cámara después del error 100 (servidor de la cámara fallecido)”

En mi aplicación para manejar el camere i utilizar esto:

  public void onResume() { super.onResume(); if(mCamera == null) mCamera = getCameraInstance(): } public static Camera getCameraInstance() { mCamera = null; try { mCamera = Camera.open(); Parameters parameters = mCamera.getParameters(); mCamera.cancelAutoFocus(); mCamera.setPreviewCallback(yourPreviewCb); mCamera.startPreview(); mCamera.setParameters(parameters); mCamera.autoFocus(yourAutoFocusCB); } catch (Exception e) { //TODO } return mCamera; } 

El mCamera = null en el getCameraInstance () es sólo para asegurarse de que no hay cámara en marcha en absoluto.

Creo que necesitas recrear una cámara completa, no solo abrirla con la

 camera.open(); 

Establezca esto en el onResume o en la devolución de llamada de error, dependiendo de sus necesidades.

Así es como lo arreglé, aquí hay una muestra de código, creo que tienes la idea:

 private Camera camera; // code... public Camera getCameraInstance() { Camera camera = Camera.open(); // code... camera.setErrorCallback(new ErrorCallback() { @Override public void onError(int error, Camera camera) { if(error == Camera.CAMERA_ERROR_SERVER_DIED) { releaseCamera(); startCamera(); } } }); return camera; } protected void startCamera() { if(getCamera() == null) setCamera(getCameraInstance()); refreshCamera(); } protected void releaseCamera() { if (getCamera() != null) { getCamera().release(); setCamera(null); } } public Camera getCamera() { return camera; } public void setCamera(Camera camera) { this.camera = camera; } 
  • Uso de la cámara del teléfono a través de Intent - ¿la actividad nunca vuelve?
  • Cómo volver de la intención de llamada
  • Autofoco que lanza la excepción
  • Desplome de Android en dialog.show ()
  • Android AutoFocusCallback no se está llamando o no está volviendo
  • FileProvider no funciona con la cámara
  • Cómo puedo dejar google maps api v2 ir directamente a mi ubicación
  • Android: onPreviewFrame nunca llamado sin SurfaceView
  • Usando cámaras frontales y traseras simultáneamente android
  • ¿Cómo medir la altura, el ancho y la distancia del objeto usando la cámara?
  • Captura la imagen sin previsualización utilizando la API de la cámara2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.