¿Cómo puedo verificar la versión del sistema de Android?


494

¿Alguien sabe cómo puedo verificar la versión del sistema (p 1.0. Ej . 2.2, Etc.) mediante programación?


¿hay acceso directo (fragmento de código o plantilla en vivo) para agregar esta comprobación en el estudio de Android
— Basheer AL-MOMANI

Respuestas:


420

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.

72
¿Algún ejemplo sobre cómo usarlo?
— Jonathan

1
La parte difícil de esto es que SDK_INT se ha definido en el Nivel 4 de API y su uso falla en 1-3. ¿Alguien sabe cómo lidiar con eso?
— Zordid

SDK está disponible desde API 1, también INCREMENTAL está disponible para todas las versiones.
— nuala

1
Build.VERSION.RELEASE es una cadena, por lo tanto, puede usar esta cadena como desee.
— paiego

8
No se preocupe, ni siquiera los hombres de las cavernas están usando las API de Android 1-3 hoy. @Zordid
— Josh

811

Ejemplo de cómo usarlo:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
     // only for gingerbread and newer versions
}

24
Ignoro totalmente cualquier versión anterior a Eclair (7), Android 2.1 y muy pronto también dejamos de admitir el 2.1. Pero puede usar el SDK en lugar de SDK_INT.
— Atom

12
El SDK estaba dependiente en el nivel 4 de la API. Utilice SDK_INT en su lugar.
— erdomester

Tengo una pregunta: si se está ejecutando en un sistema anterior a GINGERBREAD, entonces no podemos obtener android.os.Build.VERSION_CODES.GINGERBREAD, ¿se bloqueará la aplicación?
— HongchaoZhang

No, porque GINGERBREAD será reemplazado solo por el número durante la compilación de Java. Solo es necesario usar una versión de compilación más grande de Android.
— ATom

97

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)"


63
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é!


Desde SDK: "La cadena de versión visible para el usuario. Por ejemplo," 1.0 "o" 3.4b5 "." .... "3.4b5" ¿cómo puedo determinar qué número de versión es?
— davs

La respuesta completa 2.3.3 es el número de versión, o 2.2, o 2.3.5 (rom personalizado en mi caso). Ese es el número de versión del sistema operativo en su conjunto.
— Falcon165o

Devuelve lo mismo Menú >> Configuración >> Acerca del teléfono. Debe etiquetarse como Versión de firmware o algo que afecte.
— Falcon165o

58
¿Cómo demonios podría un int devolver un nulo? SDK_INT es un int primitivo.
— Zsolt Safrany

57

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 ...


48

Puedes encontrar la versión de Android mirando Build.VERSION .

La documentación recomienda que compruebe Build.VERSION.SDK_INTlos valores enBuild.VERSION_CODES .

Esto está bien siempre y cuando se dé cuenta de que Build.VERSION.SDK_INTsolo 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.


30

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_SANDWICHes 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.DONUTes 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.


77
En realidad, Build.VERSION.SDK_INT es el nivel de API, no el código de versión. Entonces, la línea correcta seríaif(Build.VERSION.SDK_INT >= 15){
— erdomester

¿Qué sucede si le digo que el código de versión es el mismo que el nivel de API y el SDK_INT de ICE_CREAM_SANDWICH es 14 y no 15? @erdomester
— Beyondo

19

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
    }

19

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


1
Este código se bloquea en Double.parseDouble (Build.VERSION.RELEASE) cuando la versión contiene más de un punto. Por ejemplo 7.1.1
— Miklós Keresztes

@ MiklósKeresztes Gracias por su comentario informativo. He arreglado mi respuesta.
— Nikita Kurtin

7
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you  like.
}

¿Podría por favor elaborar más su respuesta agregando un poco más de descripción sobre la solución que proporciona?
— abarisone

3

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;
    }
}

3

Use este método:

 public static String getAndroidVersion() {
        String versionName = "";

        try {
             versionName = String.valueOf(Build.VERSION.RELEASE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return versionName;
    }

¿Cómo ayudará esto?
— samuel owino

1

Dado que tiene bashen 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
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.