我们的应用程序适用于所有支持的Android手机"除了三星Galaxy S5" 。我们的应用程序使用相机近距离拍照。 我们在整个拍摄时都需要手电筒模式。我们检查支持的参数并设置值(如果支持)。
params设置但事件永远不会被触发或相机忽略我的设置。我使用OpenCamera进行了测试,他们的应用程序可以打开火炬,但我找不到我如何设置我的参数与他们设置他们的方式之间的区别。
这是我们的代码:
//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;
}
答案 0 :(得分:1)
我做的有点不同......也许它会帮助你!
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);
相比之下我使用Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE并且不使用setFocusAreas,setMeteringArea,setAutoWhiteBalanceLock,setWhiteBalance或setAutoExposureLock。
看到你的代码之后,我试图将每一个单独合并,看看它是否会更好地影响我的照片,没有运气。 (我的应用程序也需要特写图片。
在我尝试使用的任何设备上,参数.FOCUS_MODE_MACRO都不适合我。
编辑:
以下是我设置相机的顺序,这有助于...
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
答案 1 :(得分:1)