Trudność polega na tym, że SDK_INT został zdefiniowany na poziomie API 4 i korzystanie z niego kończy się niepowodzeniem na 1-3. Czy ktoś wie, jak sobie z tym poradzić?
Zordid
SDK jest dostępny od API 1, również INCREMENTAL jest dostępny dla wszystkich wersji.
nuala
1
Build.VERSION.RELEASE jest łańcuchem, dlatego możesz go używać w dowolny sposób.
paiego,
8
Nie martw się, nawet jaskiniowcy używają dziś interfejsów API Androida 1-3. @Zordid
Josh
811
Przykład jak z niego korzystać:
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD){// only for gingerbread and newer versions}
Całkowicie ignoruję każdą starszą wersję niż Eclair (7), Android 2.1 i wkrótce przestajemy także obsługiwać wersję 2.1. Ale możesz użyć SDK zamiast SDK_INT.
ATom
12
Pakiet SDK został wycofany na poziomie API 4. Zamiast tego należy użyć SDK_INT.
erdomester
Mam pytanie: jeśli działa na systemie starszym niż GINGERBREAD, to nie możemy uzyskać android.os.Build.VERSION_CODES.GINGERBREAD, czy aplikacja się zawiesi?
HongchaoZhang
Nie, ponieważ GINGERBREAD zostanie zastąpiony tylko liczbą podczas kompilacji Java. Konieczne jest tylko użycie większej kompilowanej wersji Androida.
ATom
97
Build.Version to miejsce, w którym można znaleźć te dane. Oto fragment kodu, w jaki sposób go sformatować.
To da ci rzeczywiste numery twojej wersji; alias 2.3.3 lub 2.2. Problem z używaniem Build.VERSION.SDK_INT polega na tym, że jeśli masz zrootowany telefon lub niestandardowy ROM, możesz mieć brak standardowego systemu operacyjnego (inaczej mój Android działa 2.3.5), a to zwróci wartość zerową podczas korzystania z Build.VERSION.SDK_INT więc Build.VERSION.RELEASE będzie działać bez względu na wszystko!
Jest to w porządku, o ile zdajesz sobie sprawę, że Build.VERSION.SDK_INTzostało wprowadzone tylko w API Poziom 4, czyli Android 1.6 (Donut). Nie wpłynie to na ciebie, ale jeśli chcesz, aby Twoja aplikacja działała na Androidzie 1.5 lub wcześniejszym, musisz Build.VERSION.SDKzamiast tego użyć przestarzałego .
Nie mogę komentować odpowiedzi, ale w odpowiedzi Kaushika istnieje ogromny błąd: SDK_INT nie jest tym samym co wersja systemowa, ale w rzeczywistości odnosi się do poziomu API.
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.ICE_CREAM_SANDWICH){//this code will be executed on devices running ICS or later}
Wartość Build.VERSION_CODES.ICE_CREAM_SANDWICHwynosi 14. 14 to poziom API Ice Cream Sandwich, podczas gdy wersja systemowa to 4.0. Więc jeśli napiszesz 4.0, twój kod zostanie wykonany na wszystkich urządzeniach, zaczynając od Donut, ponieważ 4 to poziom API Donut ( Build.VERSION_CODES.DONUTrówny 4).
if(Build.VERSION.SDK_INT >=4.0){//this code will be executed on devices running on DONUT (NOT ICS) or later}
Ten przykład jest powodem, dla którego używanie „magicznej liczby” jest złym nawykiem.
Biorąc pod uwagę, że masz bashna swoim urządzeniu z Androidem, możesz użyć tej funkcji bash:
function androidCodeName {
androidRelease=$(getprop ro.build.version.release)
androidCodeName=$(getprop ro.build.version.codename)# Time "androidRelease" x10 to test it as an integercase $androidRelease in[0-9].[0-9]|[0-9].[0-9].|[0-9].[0-9].[0-9]) androidRelease=$(echo $androidRelease | cut -d.-f1-2| tr -d .);;[0-9].) androidRelease=$(echo $androidRelease | sed 's/\./0/');;[0-9]) androidRelease+="0";;esac[-n "$androidRelease"]&&[ $androidCodeName = REL ]&&{# Do not use "androidCodeName" when it equals to "REL" but infer it from "androidRelease"
androidCodeName=""case $androidRelease in10) androidCodeName+=NoCodename;;11) androidCodeName+="Petit Four";;15) androidCodeName+=Cupcake;;20|21) androidCodeName+=Eclair;;22) androidCodeName+=FroYo;;23) androidCodeName+=Gingerbread;;30|31|32) androidCodeName+=Honeycomb;;40) androidCodeName+="Ice Cream Sandwich";;41|42|43) androidCodeName+="Jelly Bean";;44) androidCodeName+=KitKat;;50|51) androidCodeName+=Lollipop;;60) androidCodeName+=Marshmallow;;70|71) androidCodeName+=Nougat;;80|81) androidCodeName+=Oreo;;90) androidCodeName+=Pie;;100) androidCodeName+=ToBeReleased;;*) androidCodeName=unknown;;esac}
echo $androidCodeName
}
Odpowiedzi:
Sprawdzić
android.os.Build.VERSION
.źródło
Przykład jak z niego korzystać:
źródło
Build.Version to miejsce, w którym można znaleźć te dane. Oto fragment kodu, w jaki sposób go sformatować.
Wygląda na to, że „Android SDK: 19 (4.4.4)”
źródło
To da ci rzeczywiste numery twojej wersji; alias 2.3.3 lub 2.2. Problem z używaniem Build.VERSION.SDK_INT polega na tym, że jeśli masz zrootowany telefon lub niestandardowy ROM, możesz mieć brak standardowego systemu operacyjnego (inaczej mój Android działa 2.3.5), a to zwróci wartość zerową podczas korzystania z Build.VERSION.SDK_INT więc Build.VERSION.RELEASE będzie działać bez względu na wszystko!
źródło
Aby sprawdzić wersję urządzenia, która jest większa lub równa Marshmallow, użyj tego kodu.
do sprawdzania innych wystarczy zmienić VERSION_CODES jak,
K dla kitkat,
L dla loolipop N dla Nougat i tak dalej ...
źródło
Możesz sprawdzić wersję Androida, patrząc
Build.VERSION
.Dokumentacja zaleca sprawdzenie
Build.VERSION.SDK_INT
wartości wBuild.VERSION_CODES
.Jest to w porządku, o ile zdajesz sobie sprawę, że
Build.VERSION.SDK_INT
zostało wprowadzone tylko w API Poziom 4, czyli Android 1.6 (Donut). Nie wpłynie to na ciebie, ale jeśli chcesz, aby Twoja aplikacja działała na Androidzie 1.5 lub wcześniejszym, musiszBuild.VERSION.SDK
zamiast tego użyć przestarzałego .źródło
Nie mogę komentować odpowiedzi, ale w odpowiedzi Kaushika istnieje ogromny błąd: SDK_INT nie jest tym samym co wersja systemowa, ale w rzeczywistości odnosi się do poziomu API.
Wartość
Build.VERSION_CODES.ICE_CREAM_SANDWICH
wynosi 14. 14 to poziom API Ice Cream Sandwich, podczas gdy wersja systemowa to 4.0. Więc jeśli napiszesz 4.0, twój kod zostanie wykonany na wszystkich urządzeniach, zaczynając od Donut, ponieważ 4 to poziom API Donut (Build.VERSION_CODES.DONUT
równy 4).Ten przykład jest powodem, dla którego używanie „magicznej liczby” jest złym nawykiem.
źródło
if(Build.VERSION.SDK_INT >= 15){
Na przykład funkcja działa tylko dla api21 w górę po tym, jak naprawiliśmy błędy w api21 w dół
źródło
Pamiętaj, że Build.VERSION.SDK_INT nie jest niezawodny, wspomina o tym Falcon165o, a ostatnio też na to wpadłem.
Aby uzyskać dane String (na podstawie listy wersji Androida ) obecnie zainstalowanego Androida, stworzyłem taki kod:
Jawa
Kotlin
Przykład generowanego przez niego wyniku:
źródło
źródło
użyj tej klasy
źródło
Użyj tej metody:
źródło
Biorąc pod uwagę, że masz
bash
na swoim urządzeniu z Androidem, możesz użyć tej funkcji bash:źródło