19

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

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)

但是在 2.1 版本之前,我们如何进行同样的操作呢?有没有这样的事情不涉及调用Camera.openthen getParameters

4

5 回答 5

23
List<String> supportedFocusModes = camera.getParameters().getSupportedFocusModes();
boolean hasAutoFocus = supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)
于 2014-04-24T12:16:12.290 回答
6

我猜:不要使用未知常数。

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)

应该:

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

在这里使用常量是开发人员的短视。它解决了知道设备是否运行 API 的问题,该 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,这将是我的底线。

于 2011-02-24T10:01:32.003 回答
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);
        }
    }
于 2015-04-15T12:38:36.793 回答
2
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]));
            }
        }
于 2018-02-27T20:53:19.173 回答
0

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

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

于 2010-12-06T16:31:52.727 回答