Existe-t-il un moyen d'obtenir la version de l'API actuellement utilisée par le téléphone?
Comme décrit dans la documentation Android, le niveau de SDK (entier) exécuté par le téléphone est disponible dans:
Android.os.Build.VERSION.SDK_INT
La classe correspondant à cet int est dans la classe Android.os.Build.VERSION_CODES
.
Exemple de code:
_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
}
_
Modifier : Ce SDK_INT est disponible depuis Donut (Android 1.6/API4). Assurez-vous donc que votre application n'est pas rétro-compatible avec Cupcake (Android 1.5/API3). lorsque vous l'utilisez ou votre application va planter (merci au programmeur Bruce pour la précision).
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;
Cela vous donnera les chiffres réels de votre version; aka 2.3.3 ou 2.2. Le problème lié à l’utilisation de Build.VERSION.SDK_INT est que si vous avez un téléphone enraciné ou une rom personnalisée, vous pourriez avoir un système d’exploitation non standard (comme mon Android est en cours d’exécution 2.3.5) et renverra une valeur nulle lors de l’utilisation de Build. .VERSION.SDK_INT afin que Build.VERSION.RELEASE fonctionne, que vous utilisiez la version standard Android ou non!
Pour l'utiliser, vous pouvez simplement faire ceci;
String androidOS = Build.VERSION.RELEASE;
En tenant compte de tout cela, voici le code que j’utilise pour détecter si l’appareil dispose de Froyo ou d’une version plus récente Android OS (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;
}
De toute évidence, vous pouvez modifier cette condition si vous souhaitez prendre en compte les versions 1.0 et 1.5 de Android au cas où vous auriez besoin d'un vérificateur générique. Vous allez probablement vous retrouver avec quelque chose comme ça:
// 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;
}
}
Faites-moi savoir si le code ne fonctionne pas pour vous.
essaye ça:
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Gingerbread) {
// only for Gingerbread and newer versions
}
Android.os.Build.VERSION.SDK devrait vous donner la valeur du niveau de l'API. Vous pouvez facilement trouver le mappage du niveau d'api vers la version Android dans la documentation Android. Je crois que 8 est pour 2.2, 7 pour 2.1, et ainsi de suite.
Je l'ai. Il utilise la méthode getApplicationInfo()
de la classe Context
.
J'ai amélioré le code que j'ai utilisé
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;
}
Son code de travail fonctionne bien
String versionRelease = BuildConfig.VERSION_NAME;
versionRelease :- 2.1.17
Note S'il vous plaît assurez-vous que votre package d'importation est correct (importer le nom de votre package de package d'application sinon il ne fonctionne pas correctement)
je préfère avoir la version en tant que numéro à gérer plus facilement que ce que j'ai écrit:
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();
}