2015-11-03 148 views
0

我知道有很多像這樣的問題。但是,沒有任何解決方案適合我。我通過自學指南學習android。我的任務是使用Camera類實現攝像機服務。我知道相機已被棄用。不過,我打算使用Camera類來運行它。我無法連接到相機服務錯誤。我甚至沒有收到相機預覽。當我運行相機時,我所得到的只是一個黑屏和點擊按鈕,我點擊圖片。但是,第二次運行它會凍結我的手機,我必須拔出並放入電池再次工作。到目前爲止,我已經把所有的權限,該權限相機類需要 清單:Android相機沒有響應(無法連接到相機服務)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
    <uses-permission android:name="android.permission.CAMERA"></uses-permission> 
    <uses-feature android:name="android.hardware.camera" /> 
    <uses-feature android:name="android.hardware.camera.autofocus" /> 
    <uses-feature android:name="android.hardware.camera2.full"></uses-feature> 
    <application>....</application> 

我確保相機在所有需要的地方釋放。我瞭解到,如果我們不正確釋放相機,我們會發生此錯誤。 我的onPause()方法

@Override 
    public void onPause() 
    { 
     super.onPause(); 
     if(camera!=null) 
     { 
      camera.release(); 
      camera=null; 
     } 
} 

我的onResume方法

@Override 
public void onResume() 
{ 
    super.onResume(); 
    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.GINGERBREAD) 
    { 
     camera.open(0); 

    } 
    else { 
     camera.open(); 

    } 

我surfaceDestroyed方法

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

我surfaceCreated方法

public void surfaceCreated(SurfaceHolder holder) { 
      if(camera!=null) 
      { 
       try { 
        camera.setPreviewDisplay(holder); 
       } catch (IOException e) { 
        Log.e(TAG, "ERROR SETTING UP PREVIEW", e); 
       } 
      } 
     } 

我的控制檯輸出:

Process: course.examples.criminalintent, PID: 12954 
    java.lang.RuntimeException: Unable to resume activity {course.examples.criminalintent/course.examples.criminalintent.CrimeCameraActivity}: java.lang.RuntimeException: Fail to connect to camera service 

經過一番調試,我發現我的相機在整個時間都是空的。這解釋了爲什麼我在屏幕上看不到相機預覽。但是,我不明白爲什麼它凍結我的手機,我應該如何使它正常工作?請詳細解釋。謝謝!

回答

0

我想通了!我的onResume()方法錯誤的第一件事是它沒有包含在try catch塊中。此外,我用諸如(Camera.CameraInfo.CAMERA_FACING_FRONT)之類的常量替換常量0。

其次,我得到參數失敗的錯誤。我通過刪除setPreviewFormat(format)語句來刪除該錯誤。

這裏是我所做的更改:

更新的onResume()方法

try { 
       releaseCameraAndPreview(); 
       if (Id == 0) { 
        camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
       } 
       else { 
        camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK); 
       } 
      } catch (Exception e) { 
       Log.e(getString(R.string.app_name), "failed to open Camera"); 
       e.printStackTrace(); 
      } 
相關問題