Est-ce que quelqu'un sait comment vérifier la version du système (par exemple, 1.0
, 2.2
, etc.) par programmation?
Vérifiez Android.os.Build.VERSION
.
CODENAME
: Le nom de code du développement actuel ou la chaîne "REL" s'il s'agit d'une version validée.INCREMENTAL
: valeur interne utilisée par le contrôle source sous-jacent pour représenter cette version.RELEASE
: chaîne de version visible par l'utilisateur.
Exemple d'utilisation:
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Gingerbread) {
// only for Gingerbread and newer versions
}
Build.Version est l'endroit où aller pour ces données. Voici un extrait de code expliquant comment le formater.
public String getAndroidVersion() {
String release = Build.VERSION.RELEASE;
int sdkVersion = Build.VERSION.SDK_INT;
return "Android SDK: " + sdkVersion + " (" + release +")";
}
Ressemble à ceci "Android SDK: 19 (4.4.4)"
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 ne pas avoir de système d'exploitation standard (c'est-à-dire que mon Android exécute la version 2.3.5) et qu'il renverra une valeur nulle lors de l'utilisation de Build.VERSION.SDK_INT. alors Build.VERSION.RELEASE fonctionnera dans tous les cas!
Pour vérifier la version du périphérique supérieure ou égale à Marshmallow, utilisez ce code.
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.M){
}
pour vérifier que les autres ne font que changer les VERSION_CODES comme,
K pour KitKat,
L pour Loolipop N pour Nougat et ainsi de suite ...
Vous pouvez trouver la version Android en regardant Build.VERSION
.
La documentation vous recommande de comparer Build.VERSION.SDK_INT
aux valeurs de Build.VERSION_CODES
.
C’est parfait tant que vous réalisez que Build.VERSION.SDK_INT
n’a été introduit que dans l’API Niveau 4, c’est-à-dire Android 1.6 (Donut). Donc, cela ne vous affectera pas, mais si vous voulez que votre application s'exécute sur Android 1.5 ou une version antérieure, vous devrez utiliser à la place obsolète Build.VERSION.SDK
.
Je ne peux pas commenter les réponses, mais il y a une énorme erreur dans la réponse de Kaushik: SDK_INT n'est pas identique à la version du système mais fait en réalité référence au niveau de l'API.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
//this code will be executed on devices running ICS or later
}
La valeur Build.VERSION_CODES.ICE_CREAM_SANDWICH
est égale à 14. 14 est le niveau API de Sandwich à la crème glacée, tandis que la version du système est 4.0. Ainsi, si vous écrivez en 4.0, votre code sera exécuté sur tous les périphériques à partir de Donut, car 4 correspond au niveau API de Donut (Build.VERSION_CODES.DONUT
est égal à 4).
if(Build.VERSION.SDK_INT >= 4.0){
//this code will be executed on devices running on DONUT (NOT ICS) or later
}
Cet exemple est une des raisons pour lesquelles utiliser "nombre magique" est une mauvaise habitude.
Par exemple, une fonctionnalité ne fonctionne que pour api21, nous corrigeons les bugs dans api21 down
if(Build.VERSION.SDK_INT >= 21) {
//only api 21 above
}else{
//only api 21 down
}
Sachez que Build.VERSION.SDK_INT n'est pas fiable, il est mentionné par @ Falcon165o et récemment, je l'ai aussi rencontré.
Donc, pour obtenir les données de chaîne (basées sur liste des versions Android ) d'Android actuellement installé, j'ai créé un code comme celui-ci:
Java
//Current Android version data
public static String currentVersion(){
double release=Double.parseDouble(Build.VERSION.RELEASE.replaceAll("(\\d+[.]\\d+)(.*)","$1"));
String codeName="Unsupported";//below Jelly bean OR above Oreo
if(release>=4.1 && release<4.4)codeName="Jelly bean";
else if(release<5)codeName="Kit Kat";
else if(release<6)codeName="Lollipop";
else if(release<7)codeName="Marshmallow";
else if(release<8)codeName="Nougat";
else if(release<9)codeName="Oreo";
return codeName+" v"+release+", API Level: "+Build.VERSION.SDK_INT;
}
Kotlin
fun currentVersion(): String {
val release = Java.lang.Double.parseDouble(Java.lang.String(Build.VERSION.RELEASE).replaceAll("(\\d+[.]\\d+)(.*)", "$1"))
var codeName = "Unsupported"//below Jelly bean OR above Oreo
if (release >= 4.1 && release < 4.4) codeName = "Jelly bean"
else if (release < 5) codeName = "Kit Kat"
else if (release < 6) codeName = "Lollipop"
else if (release < 7) codeName = "Marshmallow"
else if (release < 8) codeName = "Nougat"
else if (release < 9) codeName = "Oreo"
return codeName + " v" + release + ", API Level: " + Build.VERSION.SDK_INT
}
Exemple de sortie qu'il produit:
Marshmallow v6.0, niveau API: 23
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you like.
}
utiliser cette classe
import Android.os.Build;
/**
* Created by MOMANI on 2016/04/14.
*/
public class AndroidVersionUtil {
public static int getApiVersion() {
return Android.os.Build.VERSION.SDK_INT;
}
public static boolean isApiVersionGraterOrEqual(int thisVersion) {
return Android.os.Build.VERSION.SDK_INT >= thisVersion;
}
}
Utilisez cette méthode:
public static String getAndroidVersion() {
String versionName = "";
try {
versionName = String.valueOf(Build.VERSION.RELEASE);
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}