Existe-t-il un moyen d'obtenir la version d'API que le téléphone exécute actuellement?
Existe-t-il un moyen d'obtenir la version d'API que le téléphone exécute actuellement?
Réponses:
Comme décrit dans la documentation Android, le niveau SDK (entier) que le téléphone exécute est disponible dans:
android.os.Build.VERSION.SDK_INT
La classe correspondant à cet int est dans la android.os.Build.VERSION_CODES
classe.
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
}
Edit : ce SDK_INT est disponible depuis Donut (android 1.6 / API4) alors assurez-vous que votre application n'est pas rétro-compatible avec Cupcake (android 1.5 / API3) lorsque vous l'utilisez ou votre application plantera (merci au programmeur Bruce pour la précision) .
minSdkVersion
sur 4
(Android 1.6) et continuez.
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 numéros réels de votre version; alias 2.3.3 ou 2.2. Le problème avec l'utilisation de Build.VERSION.SDK_INT est que si vous avez un téléphone enraciné ou une rom personnalisée, vous pouvez avoir un système d'exploitation non standard (alias mon Android exécute 2.3.5) et qui renverra un null lors de l'utilisation de Build.VERSION.SDK_INT donc Build.VERSION.RELEASE fonctionnera, peu importe que vous utilisiez la version Android standard ou non!
Pour l'utiliser, vous pouvez simplement le faire;
String androidOS = Build.VERSION.RELEASE;
int android.os.Build.VERSION.SDK_INT
et public static final int SDK_INT
et Added in API level 4
comment int (et non Integer) pourrait-il revenir NULL
? NULL
est un état pour un objet, donc sa construction ou sa VERSION pourrait être null
théoriquement, mais dans ce cas non seulement, SDK_INT
mais RELEASE
aussi provoquerait un NPE. SDK_INT pourrait probablement provoquer «aucune exception de méthode de ce type» ou quelque chose comme ça, mais pas null ou NPE. Si seulement la ROM personnalisée rompt les documents et la méthode déclarée comme public static final Integer SDK_INT
. J'essaie simplement de déterminer la nature d'un problème pour contourner ce problème.
null
n'a pas de sens.
Compte tenu de tout cela, voici le code que j'utilise pour détecter si l'appareil a Froyo ou un système d'exploitation Android plus récent (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 pour prendre en compte les versions 1.0 et 1.5 d'Android au cas où vous auriez besoin d'un vérificateur générique. Vous vous retrouverez probablement avec quelque chose comme ceci:
// 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
}
Je l'ai. Son utilisant la getApplicationInfo()
méthode de la Context
classe.
SDK.INT est pris en charge pour Android 1.6 ou version ultérieure
Le SDK est pris en charge pour toutes les versions
Moi aussi:
String sdk_version_number = android.os.Build.VERSION.SDK;
Crédits à: CommonsWare sur cette réponse
Je préfère que la version en tant que numéro soit plus facile à manipuler 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();
}
Son travail Happy Coding
String versionRelease = BuildConfig.VERSION_NAME;
versionRelease :- 2.1.17
Remarque Veuillez vous assurer que votre package d'importation est correct (importez le package du nom de votre package d'application sinon il ne fonctionnera pas correctement)
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;
}