Weiß jemand, wie ich die Systemversion (z. B. 1.0
, 2.2
usw.) programmgesteuert überprüfen kann?
Überprüfen Sie Android.os.Build.VERSION
.
CODENAME
: Der aktuelle Entwicklungs-Codename oder die Zeichenfolge "REL", wenn dies ein Release-Build ist.INCREMENTAL
: Der interne Wert, der von der zugrunde liegenden Quellcodeverwaltung zur Darstellung dieses Builds verwendet wird.RELEASE
: Die vom Benutzer sichtbare Versionszeichenfolge.
Beispiel wie man es benutzt:
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Gingerbread) {
// only for Gingerbread and newer versions
}
Build.Version ist der Ort für diese Daten. Hier ist ein Code-Snippet zum Formatieren.
public String getAndroidVersion() {
String release = Build.VERSION.RELEASE;
int sdkVersion = Build.VERSION.SDK_INT;
return "Android SDK: " + sdkVersion + " (" + release +")";
}
Sieht so aus "Android SDK: 19 (4.4.4)"
Build.VERSION.RELEASE;
Dadurch erhalten Sie die tatsächlichen Nummern Ihrer Version. aka 2.3.3 oder 2.2. Das Problem bei der Verwendung von Build.VERSION.SDK_INT ist, dass Sie, wenn Sie ein verwurzeltes Telefon oder ein benutzerdefiniertes ROM haben, möglicherweise ein Nicht-Standard-Betriebssystem haben (auch bekannt als mein Android wird 2.3.5 ausgeführt) und dass eine Null zurückgegeben wird, wenn Verwenden Sie Build.VERSION.SDK_INT, damit Build.VERSION.RELEASE funktioniert, egal was passiert!
Verwenden Sie diesen Code, um die Geräteversion zu überprüfen, die größer oder gleich Marshmallow ist.
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.M){
}
um andere zu überprüfen, ändere einfach den VERSION_CODES wie,
K für KitKat,
L für Loolipop N für Nougat und so weiter ...
Sie finden die Android -Version unter Build.VERSION
.
In der Dokumentation wird empfohlen, Build.VERSION.SDK_INT
mit den Werten in Build.VERSION_CODES
zu vergleichen.
Dies ist in Ordnung, solange Sie feststellen, dass _Build.VERSION.SDK_INT
_ nur in API Level 4 eingeführt wurde, dh Android 1.6 (Donut). Dies hat also keine Auswirkungen auf Sie. Wenn Sie jedoch möchten, dass Ihre App auf Android 1.5 oder früher ausgeführt wird, müssen Sie stattdessen das veraltete Build.VERSION.SDK
verwenden.
Ich kann die Antworten nicht kommentieren, aber es gibt einen großen Fehler in Kaushiks Antwort: SDK_INT ist nicht dasselbe wie die Systemversion, sondern bezieht sich tatsächlich auf die API-Ebene.
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
ist gleich 14. 14 ist die API-Ebene 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-Ebene von Donut ist (Build.VERSION_CODES.DONUT
entspricht 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 von "magischen Zahlen" eine schlechte Angewohnheit ist.
Zum Beispiel funktioniert eine Funktion nur für api21 up, wenn wir die folgenden Fehler in api21 down beheben
if(Build.VERSION.SDK_INT >= 21) {
//only api 21 above
}else{
//only api 21 down
}
Beachten Sie, dass Build.VERSION.SDK_INT nicht zuverlässig ist, es wird von @ Falcon165o erwähnt, und kürzlich bin ich auch auf dieses Problem gestoßen.
Um die String-Daten (basierend auf Android-Versionsliste ) des aktuell installierten Android zu erhalten, habe ich folgenden Code 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 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
}
Beispiel für eine Ausgabe, die erzeugt wird:
Marshmallow v6.0, API-Level: 23
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you like.
}
benutze diese Klasse
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;
}
}
Verwenden Sie diese Methode:
public static String getAndroidVersion() {
String versionName = "";
try {
versionName = String.valueOf(Build.VERSION.RELEASE);
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}