¿Hay alguna forma de obtener la versión API que el teléfono está ejecutando actualmente?
¿Hay alguna forma de obtener la versión API que el teléfono está ejecutando actualmente?
Respuestas:
Como se describe en la documentación de Android, el nivel de SDK (entero) que ejecuta el teléfono está disponible en:
android.os.Build.VERSION.SDK_INT
La clase correspondiente a este int está en la android.os.Build.VERSION_CODES
clase.
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 se bloqueará (gracias al Programador Bruce por la precisión) .
La documentación de Android correspondiente está aquí y aquí
minSdkVersion
en 4
(Android 1.6) y continúe.
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
);
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 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 ¡Build.VERSION.RELEASE funcionará sin importar el uso de la versión estándar de Android o no!
Para usarlo, podrías hacer esto;
String androidOS = Build.VERSION.RELEASE;
int android.os.Build.VERSION.SDK_INT
y public static final int SDK_INT
y Added in API level 4
¿cómo podría regresar int (no Integer) NULL
? NULL
es un estado para un objeto, por lo que su Build o VERSION podría ser null
teóricamente, pero en tal caso no solo SDK_INT
sino RELEASE
que también causará un NPE. SDK_INT probablemente podría causar "No hay tal excepción de método" o algo así pero no nulo o NPE. Si solo la ROM personalizada rompe los documentos y el método declarado como public static final Integer SDK_INT
. Solo estoy tratando de determinar la naturaleza de un problema para hacer una solución.
null
no tiene sentido.
Teniendo en cuenta todo lo dicho, aquí está el código que uso para detectar si el dispositivo tiene Froyo o un 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 eso si es necesario para tener en cuenta las versiones 1.0 y 1.5 de Android en caso de que necesite un verificador genérico. Probablemente terminarás 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ísame si el código no te funciona.
prueba esto:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Entendido. Está usando el getApplicationInfo()
método de la Context
clase.
SDK.INT es compatible con Android 1.6 y superior
SDK es compatible con todas las versiones
Así que hago:
String sdk_version_number = android.os.Build.VERSION.SDK;
Créditos a: CommonsWare sobre esta respuesta
Prefiero tener la versión como número para ser manejada más fácilmente 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();
}
Está funcionando feliz codificación
String versionRelease = BuildConfig.VERSION_NAME;
versionRelease :- 2.1.17
Nota Asegúrese de que su paquete de importación sea correcto (importe el paquete, el nombre del paquete de la aplicación; de lo contrario, no funcionará correctamente)
Mejoré el código que usé
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;
}