2015-02-24 61 views
0

我正在試驗錄像在我的項目上,我正在使用它來訪問它。另外我的測試設備是Nexus 5 4.4版KitKat。攝像機錯誤,當再次訪問視頻捕獲後,MediaStore.ACTION_VIDEO_CAPTURE

Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
     takeVideoIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, 
       ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
     if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); 
     } 

因此,它將我引導到視頻意圖。然後,當我按回按鈕將應用程序返回到其主視圖,並再次啓動視頻錄製時,我收到「相機錯誤:無法連接到相機」。

我必須在設備上打開內置相機應用程序並關閉它,以便我可以在我的項目上打開它。

注: 我的主視圖是一個自定義視圖,用於捕獲我的圖像,其中有一個預覽,從那裏執行上面的代碼以執行視頻捕獲。所以,發生的事情有點像這樣(按順序):

  1. at MainView press button for video intent

  2. (when video finish/cancel)

  3. goes back to MainView

  4. (press button for video intent again)

  5. "Camera Error: Can't connect to the camera".

這是初始化我的相機的代碼。

這是我的主要觀點:

@Override 
protected void onResume() { 
    super.onResume(); 
    mCameraLoader.onResume(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    mCameraLoader.onPause(); 
} 

這些是在CameraLoader類功能:

public void onResume() { 
    setUpCamera(mCurrentCameraId); 
} 

private Camera getCameraInstance(final int id) { 
    Camera c = null; 
    try { 
     c = mCameraHelper.openCamera(id); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.e("ASDA", "" + e.getMessage()); 
    } 
    return c; 
} 

private void setUpCamera(final int id) { 
    mCameraInstance = getCameraInstance(id); 
    Camera.Parameters parameters = mCameraInstance.getParameters(); 
    if (parameters.getSupportedFocusModes().contains(
      Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { 
     parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); 
    } 


    List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); 
    for (int i = previewSizes.size() - 1; i >= 0; i--) { 
     if ((previewSizes.get(i).height == DEF_HEIGHT) 
       && (previewSizes.get(i).width == DEF_WIDTH)) { 
      mCameraSize = previewSizes.get(i); 
      parameters.setPreviewSize(mCameraSize.width, mCameraSize.height); 
      Log.e("preview_sizeness", "index: " + i + " width: " + previewSizes.get(i).width 
        + " height: " + previewSizes.get(i).height); 
      break; 
     } 
    } 
    mCameraInstance.setParameters(parameters); 

    int orientation = mCameraHelper.getCameraDisplayOrientation(this.activity, 
      mCurrentCameraId); 
    CameraHelper.CameraInfo2 cameraInfo = new CameraHelper.CameraInfo2(); 
    mCameraHelper.getCameraInfo(mCurrentCameraId, cameraInfo); 
    boolean flipHorizontal = cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT; 
    mGPUImage.setUpCamera(mCameraInstance, orientation, flipHorizontal, false); 
    Camera.Parameters paramss = this.mCameraInstance.getParameters(); 

    paramss.setRotation(90); 

    this.mCameraInstance.setParameters(paramss); 
} 

public void onPause() { 
    releaseCamera(); 
} 

private void releaseCamera() { 
    mCameraInstance.setPreviewCallback(null); 
    mCameraInstance.release(); 
    mCameraInstance = null; 
} 

回答

0

我想通了這一點。實際上發生的事情是,由於活動進行得有多快,攝像機從未發現有機會正常關閉自己。所以,當視頻意圖關閉時,它立即設置相機,從而在相機設置好的時候設置相機。此外,由於相機處理不當,回到視頻意圖導致相機錯誤。

要解決這個問題,我只需要延遲進程以讓相機自動關閉。我的應用程序不再崩潰。

乾杯!

相關問題