Antworten:
Ü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 für die Verwendung:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Build.Version ist der Ort, an den diese Daten gehen. 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;
Das gibt Ihnen die tatsächlichen Nummern Ihrer Version; aka 2.3.3 oder 2.2. Das Problem bei der Verwendung von Build.VERSION.SDK_INT besteht darin, dass Sie bei einem gerooteten Telefon oder einer benutzerdefinierten ROM möglicherweise ein nicht standardmäßiges Betriebssystem haben (auch bekannt als mein Android läuft 2.3.5), das bei Verwendung von Build.VERSION.SDK_INT eine Null zurückgibt Build.VERSION.RELEASE funktioniert also auf jeden Fall!
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, ändern Sie einfach die VERSION_CODES wie K für Kitkat,
L für Loolipop N für Nougat und so weiter ...
Die Android-Version finden Sie unter Build.VERSION
.
In der Dokumentation wird empfohlen, Build.VERSION.SDK_INT
die Werte in zu überprüfen Build.VERSION_CODES
.
Dies ist in Ordnung, solange Sie feststellen, dass dies 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 unter Android 1.5 oder früher ausgeführt wird, müssen Sie Build.VERSION.SDK
stattdessen die veraltete App verwenden.
Ich kann die Antworten nicht kommentieren, aber Kaushiks Antwort enthält einen großen Fehler: SDK_INT ist nicht mit der Systemversion identisch, bezieht sich jedoch 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 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-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.
if(Build.VERSION.SDK_INT >= 15){
Zum Beispiel funktioniert eine Funktion nur für api21 up. Im Folgenden beheben wir Fehler in api21 down
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 gestoßen .
Um die String-Daten (basierend auf der Android-Versionsliste ) des aktuell installierten Android zu erhalten, habe ich einen Code wie den folgenden 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 es erzeugt:
Marshmallow v6.0, API-Level: 23
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you like.
}
Verwenden Sie 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;
}
Vorausgesetzt, Sie haben bash
auf Ihrem Android-Gerät, können Sie diese Bash-Funktion verwenden:
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
}