Der schwierige Teil dabei ist, dass SDK_INT in API Level 4 definiert wurde und die Verwendung auf 1-3 fehlschlägt. Weiß jemand, wie man damit gut umgeht?
Zordid
SDK ist seit API 1 verfügbar, auch INCREMENTAL ist für alle Versionen verfügbar.
Nuala
1
Build.VERSION.RELEASE ist ein String, daher können Sie diesen String verwenden, wie Sie möchten.
Paiego
8
Keine Sorge, nicht einmal Höhlenmenschen verwenden heute die Android-APIs 1-3. @ Zordid
Josh
811
Beispiel für die Verwendung:
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD){// only for gingerbread and newer versions}
Ich ignoriere jede ältere Version als Eclair (7), Android 2.1 und sehr bald stellen wir auch die Unterstützung für 2.1 ein. Sie können jedoch das SDK anstelle von SDK_INT verwenden.
Am
12
SDK wurde in API-Ebene 4 dekäkiert. Verwenden Sie stattdessen SDK_INT.
Erdomester
Ich habe eine Frage: Wenn es auf einem System läuft, das älter als GINGERBREAD ist, können wir android.os.Build.VERSION_CODES.GINGERBREAD nicht erhalten. Wird die App abstürzen?
HongchaoZhang
Nein, denn GINGERBREAD wird während des Java-Builds durch nur die Nummer ersetzt. Es ist nur erforderlich, eine größere Kompilierungsversion von Android zu verwenden.
Am
97
Build.Version ist der Ort, an den diese Daten gehen. Hier ist ein Code-Snippet zum Formatieren.
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!
Aus dem SDK: "Die vom Benutzer sichtbare Versionszeichenfolge. ZB" 1.0 "oder" 3.4b5 "." .... "3.4b5" Wie kann ich feststellen, um welche Versionsnummer es sich handelt?
Davs
Die ganze Antwort 2.3.3 ist die Versionsnummer oder 2.2 oder 2.3.5 (benutzerdefinierte Rom in meinem Fall). Das ist die Versionsnummer des Betriebssystems als Ganzes.
Falcon165o
Es wird dasselbe zurückgegeben: Menü >> Einstellungen >> Über das Telefon. Es sollte als Firmware-Version oder etwas Ähnliches gekennzeichnet sein.
Falcon165o
58
Wie zum Teufel könnte ein Int eine Null zurückgeben? SDK_INT ist ein primitiver Int.
Zsolt Safrany
57
Verwenden Sie diesen Code, um die Geräteversion zu überprüfen, die größer oder gleich Marshmallow ist.
Dies ist in Ordnung, solange Sie feststellen, dass dies Build.VERSION.SDK_INTnur 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.SDKstattdessen 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_SANDWICHist 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.DONUTentspricht 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.
Tatsächlich ist Build.VERSION.SDK_INT die API-Ebene und nicht der Versionscode. Die richtige Linie wäre alsoif(Build.VERSION.SDK_INT >= 15){
erdomester
Was wäre, wenn ich Ihnen sagen würde, dass der Versionscode dem API-Level entspricht und das SDK_INT von ICE_CREAM_SANDWICH 14 und nicht 15 ist? @erdomester
Beyondo
19
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}
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 datapublicstaticString currentVersion(){double release=Double.parseDouble(Build.VERSION.RELEASE.replaceAll("(\\d+[.]\\d+)(.*)","$1"));String codeName="Unsupported";//below Jelly bean OR above Oreoif(release>=4.1&& release<4.4)codeName="Jelly Bean";elseif(release<5)codeName="Kit Kat";elseif(release<6)codeName="Lollipop";elseif(release<7)codeName="Marshmallow";elseif(release<8)codeName="Nougat";elseif(release<9)codeName="Oreo";return codeName+" v"+release+", API Level: "+Build.VERSION.SDK_INT;}
Vorausgesetzt, Sie haben bashauf 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 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
}
Antworten:
Überprüfen Sie
android.os.Build.VERSION
.quelle
Beispiel für die Verwendung:
quelle
Build.Version ist der Ort, an den diese Daten gehen. Hier ist ein Code-Snippet zum Formatieren.
Sieht so aus "Android SDK: 19 (4.4.4)"
quelle
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!
quelle
Verwenden Sie diesen Code, um die Geräteversion zu überprüfen, die größer oder gleich Marshmallow ist.
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 ...
quelle
Die Android-Version finden Sie unter
Build.VERSION
.In der Dokumentation wird empfohlen,
Build.VERSION.SDK_INT
die Werte in zu überprüfenBuild.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 SieBuild.VERSION.SDK
stattdessen die veraltete App verwenden.quelle
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.
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).Dieses Beispiel ist ein Grund, warum die Verwendung von "magischen Zahlen" eine schlechte Angewohnheit ist.
quelle
if(Build.VERSION.SDK_INT >= 15){
Zum Beispiel funktioniert eine Funktion nur für api21 up. Im Folgenden beheben wir Fehler in api21 down
quelle
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
Kotlin
Beispiel für eine Ausgabe, die es erzeugt:
quelle
quelle
Verwenden Sie diese Klasse
quelle
Verwenden Sie diese Methode:
quelle
Vorausgesetzt, Sie haben
bash
auf Ihrem Android-Gerät, können Sie diese Bash-Funktion verwenden:quelle