2010-04-01 30 views
31

Estoy usando el código de muestra APIDemo de Android.Android - No se puede conectar a la cámara

Cuando ejecuto el ejemplo de CameraPreview, al principio era giving me an error.

Lo remonté y la muestra estuvo trabajando por un tiempo.
Ahora, ya no funciona. Dice

ERROR/AndroidRuntime(2949): java.lang.RuntimeException: Fail to connect to camera service 

¿Qué puede estar causando eso? Sucede cuando se llama al camera.open().

Gracias,
Tee

Respuesta

17

Asegúrese de que sus elementos <uses-permission>are in the proper positions en su archivo AndroidManifest.xml.

+2

todavía me sale este error al azar. Una de mis actividades se conecta a la cámara, toma una foto en el emulador, pasa los datos a la siguiente actividad. Cuando reinicio la actividad con algún retraso, la aplicación falla con el mismo error. Pero esto funciona la próxima vez cuando lance la aplicación completa como nueva – Nayn

+0

Derecha, el permiso debe estar fuera de etiqueta –

28

Asegúrese de liberar adecuadamente todos los recursos de la cámara adquirido:

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    if (mCam != null) { 
     mCam.stopPreview(); 
     mCam.setPreviewCallback(null); 
     mCam.release(); 
     mCam = null; 
    } 
} 

    @Override 
public void surfaceCreated(SurfaceHolder holder) { 
    if (mCam == null) { 
     mCam = Camera.open(); 
     try { 
      mCam.setPreviewDisplay(holder); 

      // TODO test how much setPreviewCallbackWithBuffer is faster 
      mCam.setPreviewCallback(this); 
     } catch (IOException e) { 
      mCam.release(); 
      mCam = null; 
     } 
    } 
} 
+0

El error es muy críptico, y me encuentro con este problema incluso entre simplemente iniciar y detener las vistas previas (hay codificación del nivel del motor que está estropeando real y no es tu culpa). Me parece que liberar la cámara entre el inicio y el final de las previsualizaciones corrige este error – Aggressor

5

Sucede si su actividad no se cierra correctamente la cámara en surfaceDestroyed o onConfigurationChanged etc ...

No olvide Haga esto cada vez que salga de su actividad:

 if (camera!=null){ 
       camera.stopPreview(); 
       camera.release(); 
       camera=null; 
     } 
4

Otro motivo de este error es cuando intenta abrir la cámara pero alguna otra aplicación n o incluso su aplicación es ya usando la cámara.

+0

Tendría que ser una aplicación que no liberara correctamente la cámara, ¿verdad? ¿Hay alguna aplicación relativamente común que no libere la cámara? – Kat

1

Como mencionan otros, debe llamar a release() en su objeto de cámara cuando haya terminado.

No estaba haciendo esto inicialmente, así que cambié mi código pero aún así me dio el mismo error. Yo estaba desplegando directamente a un teléfono físico y tuve que reiniciar el teléfono antes de que trabajó

0

También he recibido este error cuando estaba probando y se detuvo la ejecución antes de llegar al punto en el código cuando el:

if (camera!=null){ 
    camera.stopPreview(); 
    camera.release(); 
    camera=null; 
} 

era llamado. Esto bloqueó la cámara porque no se había lanzado correctamente. Mi solución fue apagar la cámara y volver a encenderla. Puede confirmar que este es el caso al intentar usar la aplicación de cámara incorporada en su teléfono. Tampoco funcionará porque todavía está ocupado.

4

También recibo este tipo de problema en un dispositivo HTC. Para resolver agregue este código:

@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    if (camera!=null) 
    { 
     camera.stopPreview(); 
     camera.release(); 
     camera=null; 
    } 
} 

Y aún así no puede iniciar la cámara y luego reiniciar el dispositivo.

+1

@Override \t protected void onDestroy() { try { camera.stopPreview(); \t \t \t camera.setPreviewCallback (null); try {camera.release();} catch (Exception e) {} camera = null; vista previa = null; } catch (Excepción e) {} super.onDestroy(); } – PankajAndroid

0

Second @ matt-burns, pero es posible que desee comprobar que solo está tratando de obtener la cámara una vez. Me olvidé de comentar una línea y estaba tratando de lanzar dos actividades que tratarían de obtener la cámara.

2

Además, si está utilizando el emulador, asegúrese de haber seleccionado Emular la Cámara frontal y/o la Cámara posterior.

Android Virtual Device Manager-> Seleccionar Device-> Editar-> Frente cámara-> emulado

Cuestiones relacionadas