Android: cómo encontrar el nombre de la versión de Android mediante programación?
Escribo código para encontrar la versión de Android como esta
Versión de cadena = Build.VERSION.RELEASE;
- Android Studio, Gradle, OpenCV y NDK
- ¿Hay alguna manera de permitir que Android NDK-build utilice una versión más reciente de gcc?
- Los símbolos se quitan cuando se construye código nativo usando Gradle
- No se pudo cargar libfoo: findLibrary returned null
- Depuración de bibliotecas nativas para Android OS
Utilizando este código estoy obtener el número de versión, pero quiero nombre de la versión. Cómo obtener el nombre de la versión ??? /
- Creación de NDK con un archivo mk diferente para la versión / depuración
- Cómo utilizar la biblioteca Assimp en Android NDK
- Adjuntar a la aplicación nativa de Android con gdb cierra la aplicación en el dispositivo
- Hello-JNI para Android Studio
- Native Debug Android Studio
- Problema con la creación del proyecto Android NDK
- Cómo obtener archivos en activos desde Android NDK
- Decodificación de vídeo con FFMpeg para Android
Como se sugirió anteriormente, la reflexión parece ser la clave de esta cuestión. El StringBuilder y el formato adicional no es necesario, solo se agregó 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 4.1, obtengo este resultado:
D/MainActivity( 1551): OS: android : 4.1.1 : JELLY_BEAN : sdk=16
¡Disfrutar!
http://developer.android.com/reference/android/os/Build.VERSION_CODES.html contiene campos que tienen el nombre que busca. Por lo tanto, puede usar la reflexión para encontrar qué campo corresponde al valor de la "versión".
¿Por qué quieres el nombre?
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 sólo funcionará en la medida en que los códigos de versión sigan siendo incrementados en uno, y tendrá que actualizar la lista con cada nueva versión de Android (si es preciso es importante).
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);
Usted obtendrá 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:
Recuperación de la versión de la API de Android mediante programación
Espero que esto te ayudará.
Como se describe en la documentación de Android, el nivel de SDK (entero) en el que se está ejecutando el teléfono está disponible en:
Android.os.Build.VERSION.SDK_INT;
El enum 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úrate de que tu aplicación no sea retro-compatible con Cupcake (android 1.5 / API3) cuando la uses o tu aplicación se bloquee (gracias al programador Bruce por la precisión) .