我正在尝试修改 Camera2BasicFragment 示例项目以支持前后摄像头之间的切换。我在预览屏幕上添加了一个切换按钮叠加层,以及以下代码来处理点击。还有一个类变量cameraDirection
来记住当前正在使用哪个相机:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button_take_photo:
takePicture();
break;
case R.id.button_reverse_camera:
CameraManager manager = (CameraManager) getActivity().getSystemService(Context.CAMERA_SERVICE);
try {
String[] cameraIds = manager.getCameraIdList();
CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(mCameraId);
for (String id : cameraIds) {
if (! id.equals(mCameraId)) {
closeCamera();
cameraDirection = cameraDirection == CameraCharacteristics.LENS_FACING_FRONT?CameraCharacteristics.LENS_FACING_BACK:
CameraCharacteristics.LENS_FACING_FRONT;
mCameraId = id;
openCamera(mPreviewSize.getWidth(), mPreviewSize.getHeight());
}
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
break;
}
}
烦人的是相机的第一个开关工作正常。但随后的开关不起作用。发生的情况是预览会稍微变淡,就像发生了什么事一样,但它仍保留在当前选定的相机上。多按几下切换按钮后,应用程序崩溃,更烦人的是没有堆栈跟踪。所以我不知道问题是什么。我怀疑相机锁没有被正确释放,但这只是一个猜测。
所以我希望有人成功地修改了这个示例来处理相机切换,或者可以推荐一个替代的 Camera2 片段实现。