如何在相机预览打开时(以编程方式)保持手电筒打开
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
所以对于我的 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