2012-03-31 31 views
12

对于Android版本3.0及更高版本,我想调用某种方法。 有没有办法检查运行的Android版本中是否有某种方法可用?如何检查HoneyComb或更高版本是否正在运行,并相应地调用该版本的方法?

更确切地说,我的MinSDK是7(Android 2.1),TargetSDK是8(Android 2.2),如果运行HoneyComb Android 3.0或更高版本,我需要测试 。 取决于那个,我怎样称之为HoneyComb方法?

问题的第二部分出现了,因为简单地调用HoneyComb方法将不会编译,因为我构建的是2.2版本。

回答

27

更确切地说,我MinSDK是7(安卓2.1),TargetSDK是8( Android 2.2),我需要测试HoneyComb Android 3.0或更高版本是否正在运行。取决于那个,我怎样称之为HoneyComb方法?

步骤#1:将您的构建目标设置为您希望直接调用的最高API级别,因此进行编译。您的构建目标(例如,Android Studio中的compileSdkVersion,Eclipse中的项目>属性> Android)与您的android:targetSdkVersion无关。

第2步:由于其他答案已经指出的,然后你可以有条件地保护块内的方法:

if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.HONEYCOMB) { 
    // call something for API Level 11+ 
} 

问题的第二部分发生,因为只是调用蜂巢方法,不会编译,因为我正在对2.2进行构建。

如果您希望直接调用API Level 11或更高的方法,则需要将构建目标更改为API Level 11或更高级别。

+5

还值得一提的是'android.os.Build.VERSION_CODES。*'成员在编译时被替换(iirc,对吧?),所以他不需要担心'HONEYCOMB','HONEYCOMB_MR2'等等在运行Gingerbread及以下版本的系统上无法使用(即定义)......他可以在以前的系统上检查它们。 – davidcesarino 2012-03-31 23:45:28

+0

很棒的tx,我错误地认为eclipe构建目标涉及到android:targetVersion。 Yipee! – mrd 2012-04-01 02:59:01

+0

唯一不好的是,这迫使我在我的HoneyComb平板电脑上测试,而不是使用我的2部手机。幸运的是,这只是一个单一的陈述,所以我将它评论出来,直到开发完成。我从来没有使用模拟器进行测试,以减缓... – mrd 2012-04-01 03:10:04

4
if (Build.VERSION.SDK_INT >= x) {} 

x是API的数量,蜂巢是11 你可以在这里找到API号码: Platform versions

相关问题