Android:检查相机是否支持自动对焦?

对于Android API版本2.1及更高版本,我们可以使用上下文:

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS) 

但在版本2.1之前,我们如何执行相同的操作? 有没有这样的事情,不涉及调用Camera.open ,然后getParameters

Solutions Collecting From Web of "Android:检查相机是否支持自动对焦?"

 List<String> supportedFocusModes = camera.getParameters().getSupportedFocusModes(); boolean hasAutoFocus = supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO) 

我猜测:不要使用未知的常量。

 getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS) 

应该:

 getPackageManager().hasSystemFeature("android.hardware.camera.autofocus") 

开发人员在这里使用常量是短暂的。 它解决了知道运行知道某个function的API的设备是否具有function的问题。 但在你刚刚提到的情况下失败了……他们真的使得支持多个API级别变得困难。

更新 :只是testing它自己… PackageManager.hasSystemFeature()只出现在API级别5.我试图添加检查到我的代码,可以很好地支持API级别3(1.5),但可以从相机的自动重点…似乎我必须select支持1.5或能够使用自动对焦…或将我的向后兼容性移动到5级…或实现这个http://www.java.net/forum/topic/ java-tools / java-development-tools / wwyt-conditional-compilation-pre-process …是的,没错。

他们真的很难支持多个版本。 所以对不起1.5和1.6和2.0用户。 因为我的设备是在2.2这将是我的底线。

  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); } } 

在API Level 5中添加了一些Camera.Parameters类的方法(我相信映射到Android 2.0)将返回一个支持的function列表。 调用camera.getParameters()中检索的Camera.Parameters对象的getSupportedFocusModes

http://developer.android.com/reference/android/hardware/Camera.Parameters.html