Camera2BasicFragment - 修改切换前/后摄像头的问题

时间:2016-02-06 19:07:44

标签: java android android-camera android-camera2

我试图修改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片段实现。

1 个答案:

答案 0 :(得分:1)

问题在方法#expression: r'[A-Z]+(.*?)</div>' #result ['uisman, D.J.'] 中,它设置了setUpCameraOutputs(int width, int height),因为它在评论中说明了

  

//在此示例中我们不使用前置摄像头。

我试过

mCameraId=cameraId;

但这还不够,因为它没有为我设置正确的预览尺寸。

您可以将方法修改为if(mCameraId==null){ mCameraId=cameraId; } 并正确设置。