我正在尝试在我的项目上进行视频录制,我正在使用它进行访问。我的测试设备也是Nexus 5版本4.4 KitKat。
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);
}
所以,它引导我进入视频意图。然后当我按下后退按钮将应用程序返回到主视图,然后再次启动视频录制时,我得到了#34;相机错误:无法连接到相机"。
我必须在设备上打开内置相机应用程序并关闭它,以便我可以在我的项目中打开它。
注意: 我的主视图是我的图像捕获的自定义视图,具有预览,从那里我有一个按钮,执行上面的视频捕获代码。所以,发生的事情有点像这样(按顺序):
在MainView按下视频意图按钮
(视频完成/取消时)
返回MainView
(再次按下视频意图按钮)
- 醇>
"相机错误:无法连接相机"。
以下是初始化我的相机的代码。
这是我的主要观点:
@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 :(得分:0)
我只想出了这个。实际上发生的事情是,由于活动进行得有多快,相机在某种程度上从未找到适当关闭自己的机会。因此,当视频意图关闭时,它会立即设置摄像头,因此,在已经设置摄像头的同时设置摄像头。此外,由于未正确处理相机,返回视频意图会导致相机错误。
要解决这个问题,我只需要延迟进程以使Camera有时间关闭。我的应用程序不再崩溃。
干杯!