【发布时间】:2015-01-26 23:23:31
【问题描述】:
我们的应用程序适用于我们所有支持的 Android 手机“三星 Galaxy S5 除外”。我们的应用程序使用相机近距离拍照。 在我们专注于拍照的整个过程中,我们需要开启手电筒模式。我们检查支持的参数并设置支持的值。
参数已设置,但事件要么永远不会被触发,要么相机忽略我的设置。我使用 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;
}
【问题讨论】:
-
添加了检查手电筒状态的方法。它已设置,即使它没有打开。在本机相机应用程序中,手电筒在设置时确实会亮起。所以,现在我正在查看 Google 代码。仍然希望有人会提供一些有用的信息。 :-)
标签: android android-camera params