Odpowiedzi:
Sprawdzić android.os.Build.VERSION
.
CODENAME
: Bieżąca nazwa kodowa programowania lub ciąg „REL”, jeśli jest to kompilacja wydania.INCREMENTAL
: Wewnętrzna wartość używana przez podstawową kontrolę źródła do reprezentowania tej kompilacji.RELEASE
: Ciąg wersji widoczny dla użytkownika.
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
}
Build.Version to miejsce, w którym można znaleźć te dane. Oto fragment kodu, w jaki sposób go sformatować.
public String getAndroidVersion() {
String release = Build.VERSION.RELEASE;
int sdkVersion = Build.VERSION.SDK_INT;
return "Android SDK: " + sdkVersion + " (" + release +")";
}
Wygląda na to, że „Android SDK: 19 (4.4.4)”
Build.VERSION.RELEASE;
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!
Aby sprawdzić wersję urządzenia, która jest większa lub równa Marshmallow, użyj tego kodu.
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){
}
do sprawdzania innych wystarczy zmienić VERSION_CODES jak,
K dla kitkat,
L dla loolipop N dla Nougat i tak dalej ...
Możesz sprawdzić wersję Androida, patrząc Build.VERSION
.
Dokumentacja zaleca sprawdzenie Build.VERSION.SDK_INT
wartości w Build.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, musisz Build.VERSION.SDK
zamiast 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_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).
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.
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ół
if(Build.VERSION.SDK_INT >= 21) {
//only api 21 above
}else{
//only api 21 down
}
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
//Current Android version data
public static String currentVersion(){
double release=Double.parseDouble(Build.VERSION.RELEASE.replaceAll("(\\d+[.]\\d+)(.*)","$1"));
String codeName="Unsupported";//below Jelly bean OR above Oreo
if(release>=4.1 && release<4.4)codeName="Jelly Bean";
else if(release<5)codeName="Kit Kat";
else if(release<6)codeName="Lollipop";
else if(release<7)codeName="Marshmallow";
else if(release<8)codeName="Nougat";
else if(release<9)codeName="Oreo";
return codeName+" v"+release+", API Level: "+Build.VERSION.SDK_INT;
}
Kotlin
fun currentVersion(): String {
val release = java.lang.Double.parseDouble(java.lang.String(Build.VERSION.RELEASE).replaceAll("(\\d+[.]\\d+)(.*)", "$1"))
var codeName = "Unsupported"//below Jelly bean OR above Oreo
if (release >= 4.1 && release < 4.4) codeName = "Jelly Bean"
else if (release < 5) codeName = "Kit Kat"
else if (release < 6) codeName = "Lollipop"
else if (release < 7) codeName = "Marshmallow"
else if (release < 8) codeName = "Nougat"
else if (release < 9) codeName = "Oreo"
return codeName + " v" + release + ", API Level: " + Build.VERSION.SDK_INT
}
Przykład generowanego przez niego wyniku:
Marshmallow v6.0, Poziom API: 23
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you like.
}
użyj tej klasy
import android.os.Build;
/**
* Created by MOMANI on 2016/04/14.
*/
public class AndroidVersionUtil {
public static int getApiVersion() {
return android.os.Build.VERSION.SDK_INT;
}
public static boolean isApiVersionGraterOrEqual(int thisVersion) {
return android.os.Build.VERSION.SDK_INT >= thisVersion;
}
}
Użyj tej metody:
public static String getAndroidVersion() {
String versionName = "";
try {
versionName = String.valueOf(Build.VERSION.RELEASE);
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
Biorąc pod uwagę, że masz bash
na 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 integer
case $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 in
10) 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
}