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

use*_*316 19 camera android autofocus

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

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)
Run Code Online (Sandbox Code Playgroud)

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

Elh*_*aky 21

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


gcb*_*gcb 6

我猜:不要使用未知的常数.

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)
Run Code Online (Sandbox Code Playgroud)

应该:

getPackageManager().hasSystemFeature("android.hardware.camera.autofocus")
Run Code Online (Sandbox Code Playgroud)

这是开发人员在这里使用常量的一个短视图.它解决了运行知道某个功能的API的设备是否具有某个功能的问题.但是你刚刚提到的案例失败了......他们真的很难支持多个api级别.

更新:我自己测试了... PackageManager.hasSystemFeature()仅出现在API级别5.我试图将该检查添加到我的代码中,该代码可以很好地支持API级别3(1.5)但可以从相机的自动获益焦点...似乎我必须选择支持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,这将是我的底线.


Ric*_*ich 0

API Level 5(我相信映射到 Android 2.0)中添加了许多 Camera.Parameters 类的方法,这些方法将返回支持的功能列表。对从camera.getParameters()检索的Camera.Parameters对象调用getSupportedFocusModes

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