2010-06-22 18 views

Respuesta

362

Verificar android.os.Build.VERSION.

  • CODENAME: El nombre en clave 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: Cadena de versión visible para el usuario.
+42

algún ejemplo sobre cómo usarlo? – jonney

+1

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

+0

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

42

Puede averiguar la versión de Android mirando Build.VERSION.

La documentación recomienda que marque Build.VERSION.SDK_INT con los valores en Build.VERSION_CODES.

Esto está bien siempre que 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 lo afectará, pero si desea que su aplicación se ejecute en Android 1.5 o anterior, deberá utilizar el Build.VERSION.SDK obsoleto.

662

Ejemplo cómo usarlo:

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

Ignoro por completo cualquier versión anterior a Eclair (7), Android 2.1 y muy pronto también dejaremos de apoyar al 2.1. Pero puede usar el SDK en lugar de SDK_INT. – ATom

+11

SDK fue depecated en API nivel 4. Use SDK_INT en su lugar. – erdomester

+0

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

53
Build.VERSION.RELEASE; 

que le dará el número real 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 rom personalizado, podría tener un sistema operativo no estándar (también conocido como mi Android está ejecutando 2.3.5) y que devolverá un valor nulo cuando use Build.VERSION. SDK_INT para Build.VERSION.RELEASE funcionará sin importar qué!

+0

De 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

+0

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 como un todo. – Falcon165o

+0

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

24

No puedo comentar sobre 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 sándwich de helado, 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 que el uso de 'número mágico' es un mal hábito.

+6

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

+0

¿Qué pasa 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 no 15? @erdomester –

54

Build.Version es el lugar donde ir para obtener esta información. 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 +")"; 
} 

Parece que tiene "Android SDK: 19 (4.4.4)"

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

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

+0

ApiHelper: no se puede resolver el símbolo –

3

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

utilizar este método:

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

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

Por ejemplo, una característica sólo funciona para api21 hasta el siguiente que corregir errores en api21 abajo

if(Build.VERSION.SDK_INT >= 21) { 
    //only api 21 above 
    }else{ 
    //only api 21 down 
    } 
14

Para verificar la versión del dispositivo que es mayor igual o igual a Marshmallow, use este código.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){ 

    } 

para ckecking otros sólo cambian los VERSION_CODES como,
K para KitKat,
L para loolipop N para Turrón y así sucesivamente ...

6

Tenga en cuenta que Build.VERSION.SDK_INT no es fiable, es mencionado por @ Falcon165o y recientemente me encontré con ese también.

Así que para obtener los datos de cadena (basado en Android version list) de Android instalada actualmente, hice un código como el siguiente:

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

Ejemplo de una salida que producen:

Marshmallow v6. 0, Nivel de 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 –

+0

@ MiklósKeresztes Gracias por su comentario informativo. He solucionado mi respuesta. –

Cuestiones relacionadas