W / CameraBase: Se ha producido un error al conectar la cámara: 0

Había una pregunta similar pero no fue resuelta:

W / CameraBase: Se ha producido un error al conectar a la cámara: 0 en camera.open () call

Tengo una aplicación que (naturalmente) está utilizando la cámara. Ha estado funcionando bien. Sin embargo, sin cambios de código, entre las compilaciones, la aplicación empezó a fallar (no se verificaron cambios de código a través del historial de confirmación de Git).

Para verificar aún más el problema está en algún lugar del hardware, corrí el mismo código en otro teléfono y funciona muy bien. De alguna manera la cámara está bloqueada y no se abrirá.

Aquí está el código relevante:

Crear un objeto previe

_cameraPreview = new CameraPreview(getActivity(),_camera); 

Este es el código de creación para ello

  public CameraPreview(Context context, Camera camera) { super(context); _camera = camera; _surfaceHolder = getHolder(); _surfaceHolder.addCallback(this); } 

Apertura de la cámara:

// Abre por defecto la cámara frente a la cámara

 public static Camera getCameraInstance() { Camera c = null; try { c = Camera.open(); }catch (Exception e) { e.printStackTrace(); } return c; } 

Aquí es donde se produce el error, camera.Open arroja el error con la siguiente traza de pila. Mi objeto de cámara es nulo. Este código es de los documentos oficiales de Android, pero no hablan de cómo "liberar la cámara" si está bloqueado fuera de la sesión.

El cierre de sesión completo es

 W/CameraBase﹕ An error occurred while connecting to camera: 0 W/System.err﹕ java.lang.RuntimeException: Fail to connect to camera service W/System.err﹕ at android.hardware.Camera.<init>(Camera.java:497) W/System.err﹕ at android.hardware.Camera.open(Camera.java:357) W/System.err﹕ at co.pumpup.app.EditPhotoFragment.getCameraInstance(EditPhotoFragment.java:241) W/System.err﹕ at co.pumpup.app.EditPhotoFragment.onCreateView(EditPhotoFragment.java:76) W/System.err﹕ at android.app.Fragment.performCreateView(Fragment.java:2053) W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) W/System.err﹕ at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) W/System.err﹕ at android.app.BackStackRecord.run(BackStackRecord.java:834) W/System.err﹕ at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) W/System.err﹕ at android.app.Activity.performStart(Activity.java:6005) W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:151) W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102) W/System.err﹕ at android.os.Looper.loop(Looper.java:135) W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5254) W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method) W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372) W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

¿Me puede aconsejar cómo puedo desbloquear una cámara bloqueada así?

El "fallo en la conexión al servicio de cámara" significa que su (o alguna otra) aplicación de cámara no ha liberado la cámara correctamente. Esto me estaba ocurriendo de vez en cuando mientras desarrollaba mi aplicación, también. Lo primero que intentaría es abrir la cámara desde la aplicación de cámara por defecto que viene con el teléfono (simplemente tocando el botón "cámara"). Si eso no se abriera, entonces la única opción era reiniciar el teléfono.

Esto es especulación, pero su código puede tener un error que sólo superficialmente ocasionalmente y que no apareció hasta ahora a través de pura suerte. Si persiste, echa un vistazo a las preguntas relacionadas con "cómo liberar la cámara correctamente en android". Me habían ayudado a lidiar con esto.

A partir de Android 6.0 (API nivel 23), los usuarios conceden permisos a las aplicaciones mientras se ejecuta la aplicación, no cuando instalan la aplicación. Este enfoque agiliza el proceso de instalación de la aplicación, ya que el usuario no necesita conceder permisos cuando instala o actualiza la aplicación. También le da al usuario más control sobre la funcionalidad de la aplicación; Por ejemplo, un usuario puede elegir dar acceso a una cámara a la cámara, pero no a la ubicación del dispositivo. El usuario puede revocar los permisos en cualquier momento, accediendo a la pantalla Configuración de la aplicación. http://developer.android.com/training/permissions/requesting.html

No sé si este es tu caso, pero me pasó a mí, así que pensé compartirlo. Mi aplicación estaba haciendo lo mismo (aunque tuve un intento alrededor de Camera.open () así que no lo vi al principio) PERO hice lo que panonski dijo y encendió la cámara desde la aplicación de cámara del sistema y vio que era Utilizando la cámara frontal. Cambiarlo de nuevo a la cámara trasera permitió que mi aplicación funcionara de nuevo.

Cambié de usar Camera.open () a Camera.open (Camera.CameraInfo.CAMERA_FACING_BACK) y ahora esto funciona no importa cómo la cámara fue dejada antes. (Utilizando Galaxy Nota 4).

Espero que esto ayude.

  • La actividad no llamó a terminar? (API 23)
  • Android IntentService Error de instancia
  • No se muestra nada después de abrir la aplicación
  • Señal fatal 7 (SIGBUS) en 0x00000000 (código = 2)
  • Java.lang.RuntimeException: No se pudo abrir el par de canales de entrada
  • No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () dentro de AsyncTask para ProgressDialog
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.