如何定位多个API级别?

时间:2011-06-28 21:23:49

标签: android android-camera android-api-levels

我希望在两个不同的API级别上使用Android的Camera.open()方法。首先是API级别7,其为2.1或更高,第二级是2.3.3& 2.3.4 API级别9。

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

如何在同一代码中定位两个API级别?类似于这个伪代码的东西:

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

3 个答案:

答案 0 :(得分: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();
        }
    }

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

在您的清单中,请务必设置android:minSdkVersionandroid:targetSdkVersion