Respuestas:
Compruebe android.os.Build.VERSION
.
CODENAME
: El nombre en código de desarrollo actual o la cadena "REL" si se trata de una versión de lanzamiento.INCREMENTAL
: El valor interno utilizado por el control de origen subyacente para representar esta compilación.RELEASE
: La cadena de versión visible para el usuario.
Ejemplo de cómo usarlo:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Build.Version es el lugar al que acudir para obtener estos datos. Aquí hay un fragmento de código sobre cómo formatearlo.
public String getAndroidVersion() {
String release = Build.VERSION.RELEASE;
int sdkVersion = Build.VERSION.SDK_INT;
return "Android SDK: " + sdkVersion + " (" + release +")";
}
Se parece a esto "SDK de Android: 19 (4.4.4)"
Build.VERSION.RELEASE;
Eso le dará los números reales de su versión; aka 2.3.3 o 2.2. El problema con el uso de Build.VERSION.SDK_INT es que si tiene un teléfono rooteado o una rom personalizada, podría tener un sistema operativo no estándar (también conocido como mi Android ejecuta 2.3.5) y eso devolverá un valor nulo cuando use Build.VERSION.SDK_INT ¡Así que Build.VERSION.RELEASE funcionará sin importar qué!
Para verificar la versión del dispositivo que es mayor o igual que Marshmallow, use este código.
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){
}
para chequear a otros simplemente cambie los VERSION_CODES como,
K para kitkat,
L para loolipop N para Turrón y así sucesivamente ...
Puedes encontrar la versión de Android mirando Build.VERSION
.
La documentación recomienda que compruebe Build.VERSION.SDK_INT
los valores enBuild.VERSION_CODES
.
Esto está bien siempre y cuando se dé cuenta de que Build.VERSION.SDK_INT
solo se introdujo en API Nivel 4, es decir, Android 1.6 (Donut). Por lo tanto, esto no le afectará, pero si desea que su aplicación se ejecute en Android 1.5 o anterior, entonces debería usar la obsoleta Build.VERSION.SDK
.
No puedo comentar las respuestas, pero hay un gran error en la respuesta de Kaushik: SDK_INT no es lo mismo que la versión del sistema, pero en realidad se refiere al Nivel API.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
//this code will be executed on devices running ICS or later
}
El valor Build.VERSION_CODES.ICE_CREAM_SANDWICH
es igual a 14. 14 es el nivel API de Ice Cream Sandwich, mientras que la versión del sistema es 4.0. Entonces, si escribe 4.0, su código se ejecutará en todos los dispositivos a partir de Donut, porque 4 es el nivel API de Donut ( Build.VERSION_CODES.DONUT
es igual a 4).
if(Build.VERSION.SDK_INT >= 4.0){
//this code will be executed on devices running on DONUT (NOT ICS) or later
}
Este ejemplo es una razón por la cual usar 'número mágico' es un mal hábito.
if(Build.VERSION.SDK_INT >= 15){
Por ejemplo, una característica solo funciona para api21 arriba, lo siguiente arreglamos errores en api21 abajo
if(Build.VERSION.SDK_INT >= 21) {
//only api 21 above
}else{
//only api 21 down
}
Tenga en cuenta que Build.VERSION.SDK_INT no es confiable, es mencionado por @ Falcon165o y recientemente me encontré con ese también.
Entonces, para obtener los datos de String (basados en la lista de versiones de Android ) de Android actualmente instalado, hice un código como este:
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
}
Ejemplo de una salida que produce:
Marshmallow v6.0, Nivel API: 23
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you like.
}
usa esta clase
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;
}
}
Use este método:
public static String getAndroidVersion() {
String versionName = "";
try {
versionName = String.valueOf(Build.VERSION.RELEASE);
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
Dado que tiene bash
en su dispositivo Android, puede usar esta función 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
}