如何在场景较暗时自动打开手电筒进行视频录制?

问题描述

我的应用显示预览,按下按钮即可开始视频录制。

我想要实现的是在视频录制开始后立即自动打开手电筒(手电筒模式)。

但是我找不到这样做的方法。在 Camera2 API 上,我们可以使用 FLASH_MODE_AUTO,它会在场景较暗时拍摄照片时使用手电筒,但这不适用于视频录制。 有这个 FLASH_MODE_TORCH 我可以用它来打开手电筒,就像我想要的那样,但没有 FLASH_MODE_TORCH_AUTO 在场景很暗时自动打开..

有一些答案使用设备的环境光传感器 (Sensor.TYPE_LIGHT) 来确定我们是否处于黑暗场景中,但是我认为使用前置环境光传感器而不是相机本身。这并不理想,因为环境光可能很低,但后置摄像头能够在不使用闪光灯的情况下调整曝光水平以获得足够好的图像质量。因此,理想情况下,如果相机提示“需要闪光灯”,则只有应用会激活 FLASH_MODE_TORCH。

由于应用程序显示预览,设备在按下按钮之前已经知道是否需要闪光灯,有没有办法确定预览时是否需要闪光灯?

解决方法

请在需要的地方试试下面的方法

下面是Camera API

items

下面是 Camera2 API

public void switchFlashOnMode() {
        Camera.Parameters p = getCamera().getParameters();
        try {
            //p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            p.setFlashMode(Parameters.FLASH_MODE_AUTO);
            getCamera().setParameters(p);
            getCamera().startPreview();
            isFlashTorch = true;
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public void switchFlashOffMode() {
        Camera.Parameters p = getCamera().getParameters();
        try {
            p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            getCamera().setParameters(p);
            Thread.sleep(200);
            getCamera().stopPreview();
            isFlashTorch = false;
        }catch (Exception e){
            e.printStackTrace();
        }
    }

希望能帮到你