我正在使用新的 camera2 API 创建自定义相机捕捉视频。
我的代码受到 Google此处提供的代码的强烈启发。我的相机预览有一个按钮,可以从后置摄像头切换到前置摄像头,然后从前置摄像头切换到后置摄像头。默认情况下,使用后置摄像头启动“相机预览”活动。
出于某种原因,当我第一次单击“切换/交换摄像头”按钮时,它应该会带到前置摄像头,但是每次我再次单击时,切换/交换不再起作用:预览(在前置摄像头上)会稍微变淡,就像发生了什么事情一样,但它仍保留在当前选定的(前置)摄像头上。
这是我的代码:
在一个RecordVideoFragment
,在onViewCreated
:
// Switch camera button
switchCameraButton = (ImageButton) view.findViewById(R.id.button_switch_camera);
// Listener for Switch cameras button
switchCameraButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchCameras();
}
});
这是switchCameras()
功能:
private void switchCameras() {
mCameraOpenCloseLock.release();
mCameraDevice.close();
CameraManager mCameraManager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);
try {
String mCameraId = mCameraManager.getCameraIdList()[0];
if (mCameraId.equals("0")) { // If currently on FRONT camera (0 = CameraCharacteristics.LENS_FACING_FRONT)
mCameraId = "1"; // switch to BACK camera (1 = CameraCharacteristics.LENS_FACING_BACK)
switchCameraButton.setImageResource(R.drawable.ic_camera_front);
} else { // If currently on BACK camera
mCameraId = "0"; // switch to front camera
switchCameraButton.setImageResource(R.drawable.ic_camera_back);
}
try {
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
mCameraManager.openCamera(mCameraId, mStateCallback, null);
} else {
requestVideoPermissions();
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
} catch (CameraAccessException e) {
Toast.makeText(getActivity(), "Cannot access the camera.", Toast.LENGTH_SHORT).show();
getActivity().finish();
}
}
如果您对正在发生的事情有任何想法,那将拯救我。这几天我一直在窃听。非常感谢