2

我希望在两个单独的 API 级别上使用 Android 的 Camera.open() 方法。第一个是 API 级别 7,即 2.1 及更高版本,第二个是 API 级别 9 的 2.3.3 和 2.3.4。

在 API 级别 7 和 8 上,Camera.open 方法不接受任何参数。在 API 级别 9 及更高级别上,相机采用一个整数参数,为它提供要使用的 cameraId。

如何在同一代码中针对两个 API 级别?类似于此伪代码的内容:

Camera lCamera;
if (Platform.APILevel < 7){
  lCamera.open();
}else { 
  lCamera.open(0);
}
4

3 回答 3

7

我们经常做反射检测。就像是:

    public Camera getCamera() {
        try {
            Method method = Camera.class.getMethod("open", Integer.TYPE);
            return (Camera) method.invoke(null, 0);
        } catch (Exception e) {
                // Yes, I really want to handle all exceptions here!!!!
                Log.d(TAG,"Error when trying to invoke Camera.open(int), reverting to open()",e);
                return Camera.open();
        }
    }
于 2011-06-28T21:34:51.897 回答
2

一般而言,您只需针对可以摆脱的最低 API 级别。为 API 级别 7 构建的任何内容都适用于 API 级别 8、9、10 等。在这种情况下,只需调用lCamera.open();它,它将选择找到的第一个后置摄像头。如果要使用前置摄像头,则必须使用更高级别的 API 级别 9。

于 2011-06-28T21:32:13.543 回答
2

您可以通过读取final static整数来获取 API 级别android.os.Build.VERSION.SDK_INT

在您的清单中,确保您设置了android:minSdkVersionAND android:targetSdkVersion

于 2011-06-28T21:35:36.577 回答