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

时间:2010-12-06 16:24:42

标签: android camera autofocus

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

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)

但在2.1版之前,我们如何执行相同的操作?是否有类似的内容,不涉及调用Camera.open然后调用getParameters

5 个答案:

答案 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