Recuperando la versión de la API de Android programáticamente

¿Hay alguna manera de obtener la versión de API que el teléfono está ejecutando actualmente?

Tal como se describe en la documentación de Android, el nivel de SDK (entero) que el teléfono está ejecutando está disponible en:

android.os.Build.VERSION.SDK_INT

La clase correspondiente a este int está en la clase android.os.Build.VERSION_CODES .

Ejemplo de código:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ // Do something for lollipop and above versions } else{ // do something for phones running an SDK before lollipop } 

Editar : Este SDK_INT está disponible desde Donut (Android 1.6 / API4) así que asegúrese de que su aplicación no sea retrocompatible con Cupcake (Android 1.5 / API3) cuando la use o su aplicación fallará (gracias al progtwigdor Bruce por la precisión) .

La documentación correspondiente de Android está aquí y aquí

Muy fácil:

  String manufacturer = Build.MANUFACTURER; String model = Build.MODEL; int version = Build.VERSION.SDK_INT; String versionRelease = Build.VERSION.RELEASE; Log.e("MyActivity", "manufacturer " + manufacturer + " \n model " + model + " \n version " + version + " \n versionRelease " + versionRelease ); 

Salida:

 E/MyActivity: manufacturer ManufacturerX model SM-T310 version 19 versionRelease 4.4.2 
 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 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 ¡Así Build.VERSION.RELEASE funcionará sin importar qué!

Para usarlo, puedes hacer esto;

 String androidOS = Build.VERSION.RELEASE; 

Teniendo en cuenta todo lo dicho, este es el código que uso para detectar si el dispositivo tiene Froyo o el sistema operativo Android más reciente (2.2+):

 public static boolean froyoOrNewer() { // SDK_INT is introduced in 1.6 (API Level 4) so code referencing that would fail // Also we can't use SDK_INT since some modified ROMs play around with this value, RELEASE is most versatile variable if (android.os.Build.VERSION.RELEASE.startsWith("1.") || android.os.Build.VERSION.RELEASE.startsWith("2.0") || android.os.Build.VERSION.RELEASE.startsWith("2.1")) return false; return true; } 

Obviamente, puede modificar esa condición para tener en cuenta las versiones 1.0 y 1.5 de Android en caso de que necesite un verificador genérico. Probablemente termines con algo como esto:

 // returns true if current Android OS on device is >= verCode public static boolean androidMinimum(int verCode) { if (android.os.Build.VERSION.RELEASE.startsWith("1.0")) return verCode == 1; else if (android.os.Build.VERSION.RELEASE.startsWith("1.1")) { return verCode <= 2; } else if (android.os.Build.VERSION.RELEASE.startsWith("1.5")) { return verCode <= 3; } else { return android.os.Build.VERSION.SDK_INT >= verCode; } } 

Avíseme si el código no funciona para usted.

prueba esto:

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

android.os.Build.VERSION.SDK debería darle el valor del nivel API. Puede encontrar fácilmente la asignación desde el nivel de la API a la versión de Android en la documentación de Android. Creo que 8 es para 2.2, 7 para 2.1, y así sucesivamente.

Lo tengo. Está utilizando el método getApplicationInfo() de la clase Context .

Prefiero tener la versión como número para ser manejado más fácil de lo que escribí esto:

  public static float getAPIVerison() { Float f = null; try { StringBuilder strBuild = new StringBuilder(); strBuild.append(android.os.Build.VERSION.RELEASE.substring(0, 2)); f = new Float(strBuild.toString()); } catch (NumberFormatException e) { Log.e("", "error retriving api version" + e.getMessage()); } return f.floatValue(); } 

Mejore el código que utilicé

 public static float getAPIVerison() { float f=1f; try { StringBuilder strBuild = new StringBuilder(); strBuild.append(android.os.Build.VERSION.RELEASE.substring(0, 2)); f= Float.valueOf(strBuild.toString()); } catch (NumberFormatException e) { Log.e("myApp", "error retriving api version" + e.getMessage()); } return f; }