2012-10-06 57 views
2

假設我有一個目標爲4.0的項目,但支持2.2版本。當運行一個2.2設備上之後,我得到正確的值是14Android 2.2如何知道4.0的版本號?

Integer version = Build.VERSION_CODES.ICE_CREAM_SANDWICH 

對我來說,這似乎很奇怪,我因爲設備使用2.2 API期待一個空值或錯誤,根據2.2 Build.VERSION_CODES類,沒有提及int ICE_CREAM_SANDWHICH = 14常數。我在這裏錯過了什麼?

+0

我懷疑這是添加了補丁/更新到Android 2.2。 –

+0

你用什麼版本編譯它? – Ahmad

+0

@Ahmad 4.0(如果你指的是android.jar文件)。 –

回答

1

正如Ahmad所說,您需要使用API​​ Level 14編譯您的代碼才能使用常量「ICE_CREAM_SANDWICH」。問題是,在編譯時,這些常量會變成它們各自的值。這意味着在運行時,任何設備都不會看到「ICE_CREAM_SANDWICH」常量,但是值爲14(即使它是安裝了Froyo 2.2的設備)。

換句話說,在你的代碼:

Integer version = Build.VERSION_CODES.ICE_CREAM_SANDWICH; 

的設備:

Integer version = 14; 

這是不完全一樣的,但你的想法。

+0

優秀的答案。謝謝。 –

1

我已經在評論中回答了,但我想我也可以把它寫下來作爲答案。

值Build.VERSION_CODE將給你取決於你編譯項目的API級別,所以如果你在API Level 10編譯它,當然你不會在你調用Build.VERSION_CODES.ICE_CREAM_SANDWICH時返回值,但是如果你在API Level 14上編譯它,你會得到正確的值。

因此,如果編譯級別低於您嘗試調用的內部版本號,它將返回空值。

+0

我剛剛用了2.2版,我甚至無法編譯,因爲該值不存在,所以我相信你:)。但是這帶來了另一個問題,我認爲在支持舊設備時我編譯我的項目的版本並不重要,因爲舊設備只會使用他們自己的Android版本運行應用程序,但顯然還有其他一些內容正在發生,是2.2設備在舊設備上運行時「使用」4.0 jar文件的某些部分?它不能使用整個文件,因爲它大約17mb? –

+2

是的,我想他們不使用everthing(如果這可能會很酷,那麼就沒有必要使事物向後兼容),但我認爲他們覆蓋了常量,比如內部編號 – Ahmad