2012-03-31 33 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

相關問題