3

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 フラグメントの実装を推奨してくれることを願っています。

4

1 に答える 1