2010-04-01 19 views
31

Sto utilizzando il codice di esempio Android APIDemo.Android - Impossibile connettersi alla telecamera

Quando si esegue l'esempio di CameraPreview, inizialmente era giving me an error.

Ho tracciato quello in basso e il campione stava lavorando per un po '.
Ora non funziona più. Si dice

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

Che cosa può essere la causa che? Succede quando viene chiamato camera.open().

Grazie,
Tee

risposta

17

Assicurarsi tuoi <uses-permission> elementi are in the proper positions nel file AndroidManifest.xml.

+2

ancora ottengo questo errore casuale. Una delle mie attività si collega alla fotocamera, scatta qualche foto sull'emulatore, passa i dati alla prossima attività. Quando riavvio l'attività con un certo ritardo, l'applicazione si arresta in modo anomalo con lo stesso errore. Ma questo funziona la prossima volta quando lancio l'applicazione completa fresco – Nayn

+0

destro, l'autorizzazione deve essere al di fuori di tag –

28

Assicurarsi di rilasciare correttamente tutte le risorse della macchina fotografica acquisita:

@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

L'errore è molto criptico, e ho incontrato questo problema anche tra il solo avvio e l'arresto anteprime (c'è codifica livello di motore che sta rovinando royally e non è colpa tua). Trovo che il rilascio della fotocamera tra l'avvio e l'arresto delle anteprime risolva questo errore – Aggressor

5

Succede se la vostra attività non si chiude correttamente la fotocamera in surfaceDestroyed o onConfigurationChanged ecc ...

Non dimenticate di fare questo ogni volta che si va fuori della vostra attività:

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

Un altro motivo di questo errore è quando si tenta di aprire fotocamera ma qualche altro applicatio n o anche la tua applicazione è già utilizzando la fotocamera.

+0

Dovrebbe essere un'applicazione che non rilascia correttamente la fotocamera, giusto? Esistono app relativamente comuni che non rilasciano la fotocamera? – Kat

1

Come altri menzionati, è necessario chiamare release() sull'oggetto della videocamera quando hai finito.

Inizialmente non stavo facendo questo, quindi ho cambiato il mio codice ma mi ha comunque dato lo stesso errore. Stavo schierando direttamente ad un portatile fisico e dovuto riavviare il telefono prima ha funzionato

0

Ho anche ricevuto questo errore quando stavo testando e si fermò l'esecuzione prima di raggiungere il punto nel codice quando il:

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

era chiamato. Questo ha bloccato la fotocamera perché non è stata rilasciata correttamente. La mia soluzione era spegnere e riaccendere la fotocamera. È possibile confermare questo caso cercando di utilizzare l'app Camera incorporata nel telefono. Non funzionerà perché è ancora occupato.

4

Ho anche questo tipo di problema su un dispositivo HTC. Per risolvere aggiungere questo codice:

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

E tuttavia non è possibile avviare fotocamera quindi riavviare dispositivo.

+1

@Override \t protected void onDestroy() { try { camera.stopPreview(); \t \t \t camera.setPreviewCallback (null); try {camera.release();} catch (Exception e) {} fotocamera = null; preview = null; } catch (Exception e) {} super.onDestroy(); } – PankajAndroid

0

Secondo @ matt-burns, tuttavia, è possibile controllare che si stia tentando di ottenere la fotocamera una sola volta. Mi ero dimenticato di commentare una frase e stavo tentando di lanciare due attività che avrebbero entrambi cercato di ottenere la fotocamera.

2

Inoltre, se si utilizza l'emulatore, assicurarsi di aver selezionato Emulazione della fotocamera anteriore e/o della videocamera posteriore.

Android Virtual Device Manager-> Selezionare Luci-> Edit-> Fronte Camera-> emulato

Problemi correlati