0

我在使用Android相機時遇到問題。Android「Camera camera = Camera.open();」時每次都會拋出錯誤,叫做

在API 25 Nougat 7.1.1 SDK上開發。閔目標SDK設置爲15

它在調用時拋出錯誤每次:

Camera camera = Camera.open(); 

出現錯誤「的RuntimeException:無法連接到相機的服務」,這可以從我的模擬器可以看到(的Nexus 5X API 25 Android 7.1.1)

在真實設備(Android 5.1.1)上測試相機功能不起作用 - 完全相同的問題。

下面是代碼:

import android.hardware.Camera; 

... 

boolean hasCamera = false; 

private boolean hasCamera(Context context) { 
     return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); 
    } 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 

    hasCamera = hasCamera(this); 
    if(!hasCamera) { 
     takePhotoButton.setText("No Camera Found"); 
     takePhotoButton.setEnabled(false); 
    } 
} 

private class TakePhotoButtonListener implements View.OnClickListener { 
    @Override 
    public void onClick(View v) { 
     if(hasCamera) { 
      try { 
       Camera camera = Camera.open(); 
       camera.startPreview(); 
       camera.takePicture(
         null, 
         null, 
         new CameraPictureCallbackJPEG()); 
      } catch (Exception e) { 
       Log.i("Error", e.getMessage()); 
      } 
     } 
    } 
} 

確實檢測到丹(hasCamera == TRUE)。

我沒有使用Camera2(從API 21開始),因爲我希望我的應用程序能夠在API 15以上工作。

我在這裏嘗試了很多答案,但沒有任何工作。請指教!

+0

http://stackoverflow.com/questions/23904459/android-java-lang-runtimeexception-fail-to-connect-to-camera-service –

+0

權限問題? – GhostCat

+0

嘗試重新啓動設備。當一些應用程序獲得相機並且沒有發佈它時,我通常會看到這一點。 – CommonsWare

回答

1

如果未添加,請將以下權限添加到您的Manifest文件中。

<uses-permission android:name="android.permission.CAMERA"/> 
<uses-feature android:name="android.hardware.camera" /> 

重要提示: 發生這種情況,因爲你已經在第一次啓動打開攝像頭之後,你還沒有釋放它的資源。 確保你應該這樣做

camera.stopPreview(); 
camera.release(); 
camera = null; 

你要做的打掃衛生的過程,當你使用相機完成釋放資源。

希望這會有所幫助。