web-dev-qa-db-fra.com

Récupération de la version de l'API Android par programme

Existe-t-il un moyen d'obtenir la version de l'API actuellement utilisée par le téléphone?

534
Parth Mehta

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).

La documentation Android correspondante est ici et ici

1015
ol_v_er

Très facile:

   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
    );

Sortie:

E/MyActivity:   manufacturer ManufacturerX
                model SM-T310 
                version 19 
                versionRelease 4.4.2
126
CommonSenseCode
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;
78
Falcon165o

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.

31
nikib3ro

essaye ça:

 if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Gingerbread) {
     // only for Gingerbread and newer versions
 }
21
Khalid Taha

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.

9
jvdneste

Je l'ai. Il utilise la méthode getApplicationInfo() de la classe Context.

4
Parth Mehta

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;
}
0
alex

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)

0
Keshav Gera

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();
}
0
alex