Android Camera2video 使用前置摄像头

Android Camera2video use front camera

我正在尝试弄清楚如何设置 camera2video 以使用前置摄像头。我是 android 开发的新手,正在尝试解决这个问题。

此方法查找前置摄像头是否存在以及return它的id(如果不存在则为-1)

private int findFrontFacingCamera() {
        int cameraId = -1;
        // Search for the front facing camera
        int numberOfCameras = Camera.getNumberOfCameras();
        for (int i = 0; i < numberOfCameras; i++) {
            Camera.CameraInfo info = new Camera.CameraInfo();
            Camera.getCameraInfo(i, info);
            if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                Log.d("CAMERA", "Camera found");
                cameraId = i;
                break;
            }
        }
        return cameraId;
    }

这段方法将帮助您使用前置摄像头:

private void useFrontFacingCamera() {
        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {

            Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG).show();

        } else {
            cameraId = findFrontFacingCamera();
            if (cameraId < 0) {
                 Toast.makeText(this, "No front facing camera found.",Toast.LENGTH_LONG).show();
            } else {

                camera = Camera.open(cameraId);
                camera.unlock();

            }
    }

//in my case i have to use frontal camera to make a scan on a qr code :

    IntentIntegrator scanIntegrator = new IntentIntegrator(this);
    scanIntegrator.setCameraId(cameraId); // <-- use this method to use your camera

    scanIntegrator.initiateScan();
}

重要提示:如果您想在其他活动中使用相机,请不要忘记这些方法:

 @Override
    protected void onPause() {

        if (camera != null) {
            camera.stopPreview();
            camera.release();
            camera = null;
            Log.d("camera", "releaseCamera -- done");
        }
        super.onPause();
    }
    @Override
    protected void onResume() {

        if (camera != null) {

            Camera.open();
            Log.d("camera", "openCamera -- done");
        }

        super.onResume();
    }
    @Override
    protected void onStart() {

        super.onStart();
    }
    @Override
    protected void onStop() {
        super.onStop();
        if (camera != null) {
            camera.stopPreview();
            camera.release();
            camera = null;
            Log.e("camera", "releaseCamera -- done");
        }
    }