Weiß jemand, wie ich die Systemversion überprüfen kann (z. B. 1.0
, 2.2
, etc.) programmatisch?
Antworten
Zu viele Anzeigen?Sie können die Android-Version unter folgender Adresse herausfinden Build.VERSION
.
In der Dokumentation wird empfohlen, Folgendes zu überprüfen Build.VERSION.SDK_INT
gegen die Werte in Build.VERSION_CODES
.
Das ist in Ordnung, solange Sie wissen, dass Build.VERSION.SDK_INT
wurde erst mit API Level 4 eingeführt, also mit Android 1.6 (Donut). Dies hat also keine Auswirkungen auf Sie, aber wenn Sie möchten, dass Ihre App auf Android 1.5 oder früher läuft, müssen Sie das veraltete Build.VERSION.SDK
stattdessen.
Ich kann mich nicht zu den Antworten äußern, aber in Kaushiks Antwort steckt ein großer Fehler: SDK_INT ist nicht dasselbe wie die Systemversion, sondern bezieht sich tatsächlich auf die API-Stufe.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
//this code will be executed on devices running ICS or later
}
Der Wert Build.VERSION_CODES.ICE_CREAM_SANDWICH
entspricht 14. 14 ist die API-Stufe von Ice Cream Sandwich, während die Systemversion 4.0 ist. Wenn Sie also 4.0 schreiben, wird Ihr Code auf allen Geräten ab Donut ausgeführt, da 4 die API-Stufe von Donut ist ( Build.VERSION_CODES.DONUT
gleicht 4).
if(Build.VERSION.SDK_INT >= 4.0){
//this code will be executed on devices running on DONUT (NOT ICS) or later
}
Dieses Beispiel ist ein Grund, warum die Verwendung der "magischen Zahl" eine schlechte Angewohnheit ist.
Beachten Sie, dass Build.VERSION.SDK_INT ist nicht zuverlässig, das hat @Falcon165o erwähnt, und vor kurzem bin ich auch auf dieses Problem gestoßen.
Um also die String-Daten zu erhalten (basierend auf Liste der Android-Versionen ) des aktuell installierten Android, habe ich einen Code wie diesen erstellt:
Java
//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
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";
else if(release < 10) codeName="Pie";
else if(release >= 10) codeName="Android "+((int)release);//since API 29 no more candy code names
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
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"
else if (release < 10) codeName = "Pie"
else if (release >= 10) codeName = "Android "+(release.toInt())//since API 29 no more candy code names
return codeName + " v" + release + ", API Level: " + Build.VERSION.SDK_INT
}
Beispiel für eine von ihm erzeugte Ausgabe:
Marshmallow v6.0, API-Stufe: 23