如何在相机预览打开时(以编程方式)保持手电筒打开

How to keep the flashlight on (programmatically) while the camera preview is ON

所以对于我的 Android 应用程序,我创建了一个 SurfaceView 并将其指定为相机预览并使用必要的 API 启动相机预览。但现在我想在预览工作时打开手电筒(有点像手电筒)。

请注意,我在网上看到了很多关于如何打开手电筒的例子,只要我不调用打开的相机,它就可以工作 API。下面是代码 -

try
{
    CameraManager cameraManager = (CameraManager)context.GetSystemService(Context.CameraService);
    if (cameraManager != null)
    {
        //for the sake of brevity, hardcoded the camera id. 0 is mostly back camera
        cameraManager.SetTorchMode(0, true); 
    }
}
catch (CameraAccessException e)
{
   LogUtil.Error("CameraInput", e.ToString());
} 

请注意,我正在 Android N 上进行测试,因此上面的代码可以完美运行。但是只要我调用下面的代码行,闪光灯就会关闭。

Camera camera = Camera.Open(0);
// ...... some code  ....//
camera.StartPreview();

上面2行执行时,闪光灯熄灭。这是一种众所周知的行为,例如相机对闪存硬件进行独占锁定并将其值重置为默认值。

我尝试反转上面的代码,即首先调用 Camera Open API 然后设置闪光灯。我得到 CameraAccessException ,相机已经在使用中。

我错过了什么?

SurfaceView

上预览时试试这个
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_ON);
camera.setParameters(params);

记住如果你想把它当作手电筒使用,你可以这样做:

parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);

如果没有,要打开拍照时闪光灯,您可以使用:

parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);

祝您编程愉快!

弄清楚如何在相机预览时打开和关闭手电筒。在按钮上单击 on/off 灯,使用此代码:

//at some other function where camera is initialised and start preview
//...
Camera camera = Camera.open();
camera.startPreview();
//...
boolean lightOn = false;
//...

buttonLight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                Camera.Parameters p = camera.getParameters();

                if (!lightOn) {
                    lightOn = true;
                    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                    camera.setParameters(p);
                } else {
                    lightOn = false;
                    p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                    camera.setParameters(p);
                }
        }
    });

编码愉快! :D