Android 三星Galaxy S5相机手电筒不工作
除了三星Galaxy S5之外,我们有一款可与所有受支持的Android手机配合使用的应用程序。我们的应用程序使用相机近距离拍照我们在聚焦拍摄照片的整个过程中都需要火炬模式。我们检查支持的参数并设置值(如果支持) 参数已设置,但事件要么从未触发,要么相机忽略我的设置。我使用OpenCamera进行了测试,他们的应用程序能够打开火炬,但我找不到我设置参数的方式与他们设置参数的方式之间的区别 这是我们的代码:Android 三星Galaxy S5相机手电筒不工作,android,android-camera,params,Android,Android Camera,Params,除了三星Galaxy S5之外,我们有一款可与所有受支持的Android手机配合使用的应用程序。我们的应用程序使用相机近距离拍照我们在聚焦拍摄照片的整个过程中都需要火炬模式。我们检查支持的参数并设置值(如果支持) 参数已设置,但事件要么从未触发,要么相机忽略我的设置。我使用OpenCamera进行了测试,他们的应用程序能够打开火炬,但我找不到我设置参数的方式与他们设置参数的方式之间的区别 这是我们的代码: //Set all camera parameters(flash, focus, whi
//Set all camera parameters(flash, focus, white balance, etc)
private void setCameraParameters()
{
//Rotate the orientation of the preview to match orientation of device
camera.setDisplayOrientation(getCameraRotation());
//A Parameters object must be used to set the other parameters.
Parameters params = camera.getParameters();
//Flash Mode to Torch if supported
if(params.getSupportedFlashModes().contains("torch"))
{
// Torch mode
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
}
//Focus Mode to Macro if supported, Auto if not
if(params.getSupportedFocusModes().contains("macro"))
{
//Macro focus mode
params.setFocusMode(Parameters.FOCUS_MODE_MACRO);
}
else
{
//Auto focus mode
params.setFocusMode(Parameters.FOCUS_MODE_AUTO);
}
//White Balance mode to Auto if available.
List<String> supported_white = params.getSupportedWhiteBalance();
if(supported_white!=null)
{
if(supported_white.contains("auto"))
{
params.setWhiteBalance(Parameters.WHITE_BALANCE_AUTO);
}
}
// Auto Exposure Lock to false if available
if(params.isAutoExposureLockSupported())
{
params.setAutoExposureLock(false);
}
// Auto White Balance Lock if available.
if(params.getAutoWhiteBalanceLock())
{
params.setAutoWhiteBalanceLock(false);
}
//JPEG quality set to 100(highest)
{
params.setJpegQuality(100);
}
//Set focus area and metering area
List<Camera.Area> focusArea = calculateFocusArea();
params.setFocusAreas(focusArea);
params.setMeteringAreas(focusArea);
Camera.Size size = pickCameraSize(params.getSupportedPictureSizes());
params.setPictureSize(size.width, size.height);
//Set new parameters for camera
camera.setParameters(params);
boolean torch = getTorchState(camera);
}
// Added this method from zxing github to see if the value is being set
boolean getTorchState(Camera camera) {
if (camera != null) {
Camera.Parameters parameters = camera.getParameters();
if (parameters != null) {
String flashMode = camera.getParameters().getFlashMode();
return flashMode != null
&& (Camera.Parameters.FLASH_MODE_ON.equals(flashMode) || Camera.Parameters.FLASH_MODE_TORCH
.equals(flashMode));
}
}
return false;
}
//设置所有摄像机参数(闪光灯、焦距、白平衡等)
私有void setCameraParameters()
{
//旋转预览的方向以匹配设备的方向
setDisplayOrientation(getCameraRotation());
//必须使用参数对象来设置其他参数。
Parameters params=camera.getParameters();
//闪光模式至火炬(如支持)
如果(params.getSupportedFlashModes()包含(“火炬”))
{
//火炬模式
参数设置闪光模式(参数闪光模式);
}
//聚焦模式为宏(如果支持),自动(如果不支持)
if(params.getSupportedFocusModes()包含(“宏”))
{
//宏焦点模式
params.setFocusMode(Parameters.FOCUS\u MODE\u宏);
}
其他的
{
//自动对焦模式
params.setFocusMode(Parameters.FOCUS\u MODE\u AUTO);
}
//白平衡模式为自动(如果可用)。
List supported_white=params.getSupportedWhiteBalance();
如果(受支持的\u白色!=null)
{
如果(受支持,包含(“自动”))
{
参数设置白平衡(参数白平衡自动);
}
}
//自动曝光锁定为false(如果可用)
if(params.isAutoExposureLockSupported())
{
参数setAutoExposureLock(假);
}
//自动白平衡锁(如果可用)。
if(params.getAutoWhiteBalanceLock())
{
参数setAutoWhiteBalanceLock(假);
}
//JPEG质量设置为100(最高)
{
参数设置质量(100);
}
//设置焦点区域和测光区域
List focusArea=calculateFocusArea();
参数setFocusAreas(focusArea);
参数设置计量区域(焦点区域);
Camera.Size Size=pickCameraSize(params.getSupportedPictureSizes());
参数setPictureSize(大小、宽度、大小、高度);
//为摄影机设置新参数
摄像机。设置参数(参数);
布尔火炬=getTorchState(摄像机);
}
//从zxing github添加此方法,以查看是否正在设置值
布尔getTorchState(摄影机){
如果(照相机!=null){
Camera.Parameters=Camera.getParameters();
if(参数!=null){
字符串flashMode=camera.getParameters().getFlashMode();
返回flashMode!=null
&&(Camera.Parameters.FLASH_MODE_ON.equals(flashMode)| | Camera.Parameters.FLASH_MODE_TORCH)
.equals(flashMode));
}
}
返回false;
}
我的做法略有不同。。也许它会帮助你
params = getCamera().getParameters();
...
//Check if device supports torch mode, If YES then enable
List<String> supportedFlashModes = params.getSupportedFlashModes();
if (supportedFlashModes != null && supportedFlashModes.contains(Parameters.FLASH_MODE_TORCH)){
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
torchModeOn = true;
}
...
getCamera().setParameters(params);
params=getCamera().getParameters();
...
//检查设备是否支持火炬模式,如果支持,则启用
List supportedFlashModes=params.getSupportedFlashModes();
if(supportedFlashModes!=null&&supportedFlashModes.contains(Parameters.FLASH\u MODE\u TORCH)){
参数设置闪光模式(参数闪光模式);
torchModeOn=true;
}
...
getCamera().setParameters(参数);
相比之下,我使用的是Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE,而不是setFocusAreas、setMeteringArea、setAutoWhiteBalanceLock、setWhiteBalance或setAutoExposureLock
在看过你的代码后,我试着将每一个代码单独合并,看看它是否会更好地影响我的图片,但运气不好。(我的应用程序也需要特写图片
Parameters.FOCUS\u MODE\u宏在我试用过的任何设备上都不适合我
编辑:
这是我设置相机的顺序,以防它有帮助
setCameraDisplayRotation();
params = getCamera().getParameters();
setFocusMode();
//Check if device supports torch mode, If you YES then set on
List<String> supportedFlashModes = params.getSupportedFlashModes();
if (supportedFlashModes != null && supportedFlashModes.contains(Parameters.FLASH_MODE_TORCH)){
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
torchModeOn = true;
}
setImageResolution();
getCamera().setParameters(params); // update params before preview.setCamera
preview.setCamera(getCamera());
//... some custom code for determining the current screens available space for the preview
params.setPreviewSize(size.width, size.height);
if(setHiddenParameter(params, "zsl-values", "zsl", "on")){
setUsingZsl(true);
};
getCamera().setParameters(params); //update params after preview init
setCameraRadisPlayRotation();
params=getCamera().getParameters();
setFocusMode();
//检查设备是否支持火炬模式,如果支持,则打开
List supportedFlashModes=params.getSupportedFlashModes();
if(supportedFlashModes!=null&&supportedFlashModes.contains(Parameters.FLASH\u MODE\u TORCH)){
参数设置闪光模式(参数闪光模式);
torchModeOn=true;
}
setImageResolution();
getCamera().setParameters(params);//在预览之前更新params.setCamera
preview.setCamera(getCamera());
//…一些用于确定当前屏幕预览可用空间的自定义代码
参数setPreviewSize(size.width、size.height);
if(setHiddenParameter(参数“zsl值”、“zsl”、“on”)){
设置使用zsl(真);
};
getCamera().setParameters(params);//预览初始化后更新params
您必须在Android棒棒糖中使用新的camera2 API
并且添加了一种检查火炬状态的方法。火炬状态已设置,即使未打开。在本机摄像头应用程序中,火炬在设置时确实会启动。因此,现在我正在查看谷歌代码。仍然希望有人能提供一些有用的信息。:-)哈!我们可以使用宏模式。摄像头参数显示闪光灯模式为手电筒,但摄像头没有响应。加载预览后,是否将闪光模式更改为手电筒?我试着改变了顺序,结果发现