我正在試驗錄像在我的項目上,我正在使用它來訪問它。另外我的測試設備是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);
}
因此,它將我引導到視頻意圖。然後,當我按回按鈕將應用程序返回到其主視圖,並再次啓動視頻錄製時,我收到「相機錯誤:無法連接到相機」。
我必須在設備上打開內置相機應用程序並關閉它,以便我可以在我的項目上打開它。
注: 我的主視圖是一個自定義視圖,用於捕獲我的圖像,其中有一個預覽,從那裏執行上面的代碼以執行視頻捕獲。所以,發生的事情有點像這樣(按順序):
at MainView press button for video intent
(when video finish/cancel)
goes back to MainView
(press button for video intent again)
"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;
}