我希望在两个不同的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);
}
答案 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:minSdkVersion
和android:targetSdkVersion
。