对于Android API 2.1及更高版本,我们可以使用上下文:
getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)
但在2.1版之前,我们如何执行相同的操作?是否有类似的内容,不涉及调用Camera.open
然后调用getParameters
?
答案 0 :(得分:21)
List<String> supportedFocusModes = camera.getParameters().getSupportedFocusModes();
boolean hasAutoFocus = supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)
答案 1 :(得分:6)
我猜:不要使用未知的常数。
getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)
应该是:
getPackageManager().hasSystemFeature("android.hardware.camera.autofocus")
这是开发人员在这里使用常量的一个短视图。它解决了运行知道某个功能的API的设备是否具有某个功能的问题。但是你刚才提到的情况就失败了......他们真的很难支持多个api级别。
已更新:我自己测试了... PackageManager.hasSystemFeature()仅出现在API级别5.我试图将该检查添加到我的代码中,该代码可以很好地支持API级别3 (1.5),但可以从相机的自动对焦中受益...似乎我必须选择支持1.5或能够使用自动对焦...或将我的向后兼容性移至第5级......或实现此{{3}是的,是的,是的。
他们真的很难支持多个版本。很抱歉1.5和1.6和2.0用户。因为我的设备是2.2,这将是我的底线。
答案 2 :(得分:3)
private void getSuppourtedFocusedModes(Camera camera)
{
final Camera.Parameters parameters = camera.getParameters();
List<String> supportedFocusModes = parameters.getSupportedFocusModes();
LogUtils.infoMsg("supportedFocusModes " + supportedFocusModes);
for (String mode : supportedFocusModes) {
LogUtils.infoMsg("supportedFocusModes " + mode);
}
}
答案 3 :(得分:1)
CameraManager cameraManager = (android.hardware.camera2.CameraManager) getSystemService(CAMERA_SERVICE);
int[] afModes = cameraManager.getCameraCharacteristics("0").get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);
if (afModes.length <= 1)
{Log.d(TAG, "Camera doesn't have autofocus");}
else
{Log.d(TAG, "Camera has autofocus");}
Log.d(TAG, "CONTROL_AF_AVAILABLE_MODES:");
for (int position : afModes) {
switch (afModes[position]) {
case 0:
Log.d(TAG, "CONTROL_AF_MODE_OFF (0)");
break;
case 1:
Log.d(TAG, "CONTROL_AF_MODE_AUTO (1)");
break;
case 2:
Log.d(TAG, "CONTROL_AF_MODE_MACRO (2)");
break;
case 3:
Log.d(TAG, "CONTROL_AF_MODE_CONTINUOUS_VIDEO (3)");
break;
case 4:
Log.d(TAG, "CONTROL_AF_MODE_CONTINUOUS_PICTURE (4)");
break;
case 5:
Log.d(TAG, "CONTROL_AF_MODE_EDOF (5)");
break;
default:
Log.d(TAG, String.valueOf(afModes[position]));
}
}
答案 4 :(得分:0)
在API Level 5中添加了许多Camera.Parameters类的方法(我相信映射到Android 2.0),它将返回支持的功能列表。在从camera.getParameters()检索的Camera.Parameters对象上调用getSupportedFocusModes
http://developer.android.com/reference/android/hardware/Camera.Parameters.html