2010-04-01 107 views
31

我正在使用Android APIDemo示例代碼。Android - 無法連接到相機

當我運行CameraPreview示例時,起初它是giving me an error

我跟蹤了一下,樣本工作了一段時間。
現在,它不再有效。它說

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

什麼可能導致這種情況?它發生在調用camera.open()時。

感謝,
三通

回答

17

AndroidManifest.xml文件確保您的<uses-permission>元素are in the proper positions

+2

我仍然隨機得到這個錯誤。我的一項活動連接到相機,在模擬器上拍攝一些照片,將數據傳遞到下一個活動。當我以某種延遲重新啓動活動時,應用程序崩潰時出現相同的錯誤。但這個工程下一次當我啓動完整的應用程序作爲新鮮 – Nayn 2010-07-26 06:27:34

+0

權利,應該超出標籤 – 2014-11-10 13:14:17

28

一定要正確釋放所有的獲得性資源攝像頭:

@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

這個錯誤是非常神祕的,我甚至在剛剛開始和停止預覽之間遇到這個問題(有引擎級編碼正在肆虐,而不是你的錯)。我發現,在開始和停止預覽之間釋放相機修復了這個錯誤 – Aggressor 2015-07-17 20:43:15

5

它發生,如果你的活動不正常關閉相機surfaceDestroyedonConfigurationChanged等等

不要忘了做到這一點,每次你走你的活動:

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

此錯誤的另一個原因是,當你試圖打開攝像頭,但其他一些應用A n甚至您的應用程序是已使用相機

+0

它必須是一個應用程序,雖然沒有正確釋放相機,對吧?是否有任何相對常見的應用程序不會釋放相機? – Kat 2014-04-17 01:08:05

1

正如其他人提到的,當你完成後,你必須在你的相機對象上調用release()。

我最初沒有這樣做,所以我改變了我的代碼,但它仍然給我同樣的錯誤。我是直接部署到物理的手機,不得不重新啓動手機之前,它的工作

0

我也收到了,當我在測試這個錯誤並在代碼到達點時之前停止執行:

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

是調用。這會阻止相機,因爲它沒有正確釋放。我的解決方案是關閉相機並重新打開。您可以通過嘗試在手機中使用內置的相機應用來確認這種情況。它不會工作,因爲它仍然很忙。

4

我也在HTC設備上遇到這種類型的問題。要解決添加此代碼:

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

然而,你不能啓動相機,然後重新啓動設備。

+1

@Override \t protected void onDestroy(){ 嘗試camera.stopPreview(); \t \t \t camera.setPreviewCallback(null); try {camera.release();} catch(Exception e){} camera = null; preview = null; (例外e){} super.onDestroy(); } – PankajAndroid 2012-12-25 11:26:19

0

Second @ matt-burns但是你可能想檢查一下,你只是想試一次相機。我忘了發表評論,並試圖發起兩個都試圖獲得相機的活動。

2

此外,如果您正在使用模擬器,請確保您已選擇模擬前置攝像頭和/或後置攝像頭。

Android Virtual Device Manager-> Select Device-> Edit-> Front Camera-> Emulated