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

时间:2019-01-11 04:17:25

标签: android android-camera flashlight

因此,对于我的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();

执行以上两行时,闪光灯熄灭。这是一个已知的行为吗,例如相机在哪里独占锁定了闪存硬件并将其值重置为默认值。

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

我想念什么?

2 个答案:

答案 0 :(得分:0)

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);

快乐编码!

答案 1 :(得分:0)

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

//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