Android: ¿cómo encontrar el nombre de la versión de Android programáticamente?

escribo código para encontrar la versión de Android como esta

Versión de cadena = Build.VERSION.RELEASE;

Al usar este código, obtengo el número de versión, pero quiero el nombre de la versión. cómo obtener el nombre de la versión ??? /

Como se sugirió anteriormente, la reflexión parece ser la clave de esta pregunta. El StringBuilder y el formato extra no son necesarios, solo se agregaron para ilustrar el uso.

import java.lang.reflect.Field; ... StringBuilder builder = new StringBuilder(); builder.append("android : ").append(Build.VERSION.RELEASE); Field[] fields = Build.VERSION_CODES.class.getFields(); for (Field field : fields) { String fieldName = field.getName(); int fieldValue = -1; try { fieldValue = field.getInt(new Object()); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } if (fieldValue == Build.VERSION.SDK_INT) { builder.append(" : ").append(fieldName).append(" : "); builder.append("sdk=").append(fieldValue); } } Log.d(LOG_TAG, "OS: " + builder.toString()); 

En mi emulador de 4.1, obtengo esta salida:

 D/MainActivity( 1551): OS: android : 4.1.1 : JELLY_BEAN : sdk=16 

¡Disfrutar!

Código optimizado, esto funcionará:

 import java.lang.reflect.Field; Field[] fields = Build.VERSION_CODES.class.getFields(); String osName = fields[Build.VERSION.SDK_INT + 1].getName(); Log.d("Android OsName:",osName); 

http://developer.android.com/reference/android/os/Build.VERSION_CODES.html contiene campos que tienen el nombre que estás buscando. Por lo tanto, podría usar la reflexión para encontrar qué campo corresponde al valor de “versión”.

¿Por qué quieres el nombre?

Obtendrás la información de estos

 android.os.Build.VERSION_CODES android.os.Build.VERSION.SDK_INT 

Se puede obtener más información de este enlace:

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

Espero que esto te ayudará.

Mira esto:

 // Names taken from android.os.build.VERSION_CODES String[] mapper = new String[] { "ANDROID BASE", "ANDROID BASE 1.1", "CUPCAKE", "DONUT", "ECLAIR", "ECLAIR_0_1", "ECLAIR_MR1", "FROYO", "GINGERBREAD", "GINGERBREAD_MR1", "HONEYCOMB", "HONEYCOMB_MR1", "HONEYCOMB_MR2", "ICE_CREAM_SANDWICH", "ICE_CREAM_SANDWICH_MR1", "JELLY_BEAN" }; int index = Build.VERSION.SDK_INT - 1; String versionName = index < mapper.length? mapper[index] : "UNKNOWN_VERSION"; // > JELLY_BEAN) 

Tenga en cuenta que esta solución solo funcionará en la medida en que los códigos de versión sigan incrementándose en uno, y tendrá que actualizar la lista con cada nueva versión de Android (si la precisión es importante).

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 enumeración correspondiente a este int está en la clase android.os.Build.VERSION_CODES.

Ejemplo de código:

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

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

import java.lang.reflect.Field; Field[] fields = Build.VERSION_CODES.class.getFields(); String osName = fields[Build.VERSION.SDK_INT + 1].getName();

Este código funcionará. Luego, solo usa la variable osName como quieras.

La reflexión no funciona cuando lo he intentado en el emulador ejecutándose en API 19.

Así que se me ocurrió una respuesta híbrida de “Nacho Coloma” y “Kevin Grant”

 String osName=""; Field[] fields = Build.VERSION_CODES.class.getFields(); for (Field field : fields) { String fieldName = field.getName(); int fieldValue = -1; try { fieldValue = field.getInt(new Object()); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } if (fieldValue == Build.VERSION.SDK_INT) { osName=fieldName; break; } } if(osName.isEmpty()) { String[] mapper = new String[]{ "ANDROID BASE", "ANDROID BASE 1.1", "CUPCAKE", "DONUT", "ECLAIR", "ECLAIR_0_1", "ECLAIR_MR1", "FROYO", "GINGERBREAD", "GINGERBREAD_MR1", "HONEYCOMB", "HONEYCOMB_MR1", "HONEYCOMB_MR2", "ICE_CREAM_SANDWICH", "ICE_CREAM_SANDWICH_MR1", "JELLY_BEAN", "JELLY_BEAN", "JELLY_BEAN", "KITKAT", "KITKAT", "LOLLIPOOP", "LOLLIPOOP_MR1", "MARSHMALLOW", "NOUGAT", "NOUGAT", "OREO", "OREO", "ANDROID P"}; int index = Build.VERSION.SDK_INT - 1; osName = index < mapper.length ? mapper[index] : "UNKNOWN_VERSION"; } 

Esta respuesta proporciona mejores nombres (completos) para Marshmallow, y también permanece a prueba de futuro si no actualiza su aplicación cuando sale una nueva versión (lo mejor de ambos mundos). La lista de nombres de versión proviene de aquí .

 String versionName = Build.VERSION_CODES.class.getFields()[Build.VERSION.SDK_INT + 1].getName(); String[] versionNames = new String[]{ "ANDROID BASE", "ANDROID BASE 1.1", "CUPCAKE", "DONUT", "ECLAIR", "ECLAIR_0_1", "ECLAIR_MR1", "FROYO", "GINGERBREAD", "GINGERBREAD_MR1", "HONEYCOMB", "HONEYCOMB_MR1", "HONEYCOMB_MR2", "ICE_CREAM_SANDWICH", "ICE_CREAM_SANDWICH_MR1", "JELLY_BEAN", "JELLY_BEAN_MR1", "JELLY_BEAN_MR2", "KITKAT", "KITKAT_WATCH", "LOLLIPOP", "LOLLIPOP_MR1", "MARSHMALLOW", "NOUGAT", "OREO", "OREO_MR1" }; int nameIndex = Build.VERSION.SDK_INT - 1; if (nameIndex < versionNames.length) { versionName = versionNames[nameIndex]; } 

Obviamente esto es derivado de las respuestas de otros. En mi experiencia, a las personas no les gusta cuando tratas de editar una respuesta existente para mejorarla, de ahí mi creación de una nueva.

Puede intentar seguir la función.

  public String AndroidOSName() { String os = Build.VERSION.SDK; System.out.println("here is my os" + " " + os); if (os.equals("23")) { return "Marshmallow"; } else if (os.equals("21")) { return "Lollipop"; } else if (os.equals("22")) { return "LOLLIPOP_MR1"; } else if (os.equals("20")) { return "KitKat"; } else if (os.equals("19")) { return "KitKat"; } else if (os.equals("18")) { return "Jelly Bean"; } else if (os.equals("17")) { return "Jelly Bean"; } else if (os.equals("16")) { return "Jelly Bean"; } else if (os.equals("15")) { return "Ice Cream Sandwich"; } else if (os.equals("14")) { return "Ice Cream Sandwich"; } else if (os.equals("13")) { return "Honeycomb"; } else if (os.equals("12")) { return "Honeycomb"; } else if (os.equals("11")) { return "Honeycomb"; } else if (os.equals("10")) { return "Gingerbread"; } else if (os.equals("9")) { return "Froyo"; } else if (os.equals("8")) { return "Froyo"; } else { return "Not Found"; } }