Comment puis-je vérifier la version système d'Android?


494

Est -ce que quelqu'un sait comment puis - je vérifier la version du système (par exemple 1.0, 2.2etc.) programatically?


existe-t-il un raccourci (extrait de code ou modèle en direct) pour ajouter cette vérification dans le studio Android
Basheer AL-MOMANI

Réponses:


420

Vérifiez android.os.Build.VERSION.

  • CODENAME: Le nom de code de développement actuel, ou la chaîne "REL" s'il s'agit d'une version.
  • INCREMENTAL: Valeur interne utilisée par le contrôle de source sous-jacent pour représenter cette génération.
  • RELEASE: La chaîne de version visible par l'utilisateur.

72
des exemples sur la façon de l'utiliser?
Jonathan

1
La partie difficile à ce sujet est que SDK_INT a été défini dans l'API niveau 4 et son utilisation échoue sur 1-3. Est-ce que quelqu'un sait comment bien gérer cela?
Zordid

Le SDK est disponible depuis l'API 1, INCREMENTAL est également disponible pour toutes les versions.
nuala

1
Build.VERSION.RELEASE est une chaîne, vous pouvez donc utiliser cette chaîne comme vous le souhaitez.
paiego

8
Ne vous inquiétez pas, même les hommes des cavernes n'utilisent pas aujourd'hui les API Android 1-3. @Zordid
Josh

811

Exemple d'utilisation:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
     // only for gingerbread and newer versions
}

24
J'ignore totalement toute version plus ancienne qu'Eclair (7), Android 2.1 et très bientôt nous arrêtons également le support pour le 2.1. Mais vous pouvez utiliser le SDK au lieu de SDK_INT.
ATom

12
Le SDK a été déprécié au niveau de l'API 4. Utilisez plutôt SDK_INT.
erdomester

J'ai une question: s'il fonctionne sur un système plus ancien que GINGERBREAD, alors nous ne pouvons pas obtenir android.os.Build.VERSION_CODES.GINGERBREAD, l'application se bloquera-t-elle?
HongchaoZhang

Non, car GINGERBREAD sera remplacé par le seul numéro lors de la génération java. Il est seulement nécessaire d'utiliser une version de compilation plus grande d'Android.
ATom

97

Build.Version est l'endroit où aller pour ces données. Voici un extrait de code pour savoir comment le formater.

public String getAndroidVersion() {
    String release = Build.VERSION.RELEASE;
    int sdkVersion = Build.VERSION.SDK_INT;
    return "Android SDK: " + sdkVersion + " (" + release +")";
}

Il ressemble à ceci "SDK Android: 19 (4.4.4)"


63
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 quoi qu'il arrive!


Du SDK: "La chaîne de version visible par l'utilisateur. Par exemple," 1.0 "ou" 3.4b5 "." .... "3.4b5" comment puis-je déterminer de quel numéro de version s'agit-il?
davs

La réponse complète 2.3.3 est le numéro de version, ou 2.2, ou 2.3.5 (rom personnalisé dans mon cas). C'est le numéro de version du système d'exploitation dans son ensemble.
Falcon165o

Cela renvoie la même chose Menu >> Paramètres >> À propos du téléphone. Il doit être étiqueté Version du micrologiciel ou quelque chose à cet effet.
Falcon165o

58
Comment diable un int pouvait-il retourner un nul? SDK_INT est un int primitif.
Zsolt Safrany

57

Pour vérifier la version de l'appareil qui est supérieure ou égale à Marshmallow, utilisez ce code.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){

    }

pour vérifier les autres, il suffit de changer les VERSION_CODES comme,
K pour kitkat,
L pour loolipop N pour Nougat et ainsi de suite ...


48

Vous pouvez trouver la version Android en regardant Build.VERSION.

La documentation vous recommande de vérifier Build.VERSION.SDK_INTles valeurs dans Build.VERSION_CODES.

C'est bien tant que vous vous rendez compte que cela Build.VERSION.SDK_INTn'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 vouliez que votre application s'exécute sur Android 1.5 ou une version antérieure, vous devriez utiliser la version obsolète à la Build.VERSION.SDKplace.


30

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 la même que la version système mais fait en fait référence au niveau 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_SANDWICHest égale à 14. 14 est le niveau API de Ice Cream Sandwich, tandis que la version système est 4.0. Donc, si vous écrivez 4.0, votre code sera exécuté sur tous les appareils à partir de Donut, car 4 est le niveau API de Donut ( Build.VERSION_CODES.DONUTé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 raison pour laquelle l'utilisation du «nombre magique» est une mauvaise habitude.


7
En fait, Build.VERSION.SDK_INT est le niveau API, pas le code de version. Donc, la ligne appropriée seraitif(Build.VERSION.SDK_INT >= 15){
erdomester

Que se passe-t-il si je vous dis que le code de version est le même que le niveau API et que le SDK_INT de ICE_CREAM_SANDWICH est 14 et non 15? @erdomester
Beyondo

19

Par exemple, une fonctionnalité ne fonctionne que pour api21 up, ce qui suit, nous corrigeons les bugs dans api21 down

    if(Build.VERSION.SDK_INT >= 21) {
    //only api 21 above
    }else{
   //only api 21 down
    }

19

Sachez que Build.VERSION.SDK_INT n'est pas fiable, il est mentionné par @ Falcon165o et récemment j'ai rencontré celui-là aussi.

Donc, pour obtenir les données String (basées sur la 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


1
Ce code se bloque sur Double.parseDouble (Build.VERSION.RELEASE) lorsque la version contient plusieurs points. Par exemple 7.1.1
Miklós Keresztes

@ MiklósKeresztes Merci pour votre commentaire informatif - j'ai corrigé ma réponse.
Nikita Kurtin

7
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you  like.
}

Pourriez-vous élaborer davantage votre réponse en ajoutant un peu plus de description sur la solution que vous proposez?
abarisone

3

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

3

Utilisez cette méthode:

 public static String getAndroidVersion() {
        String versionName = "";

        try {
             versionName = String.valueOf(Build.VERSION.RELEASE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return versionName;
    }

Comment cela vous aidera-t-il?
samuel owino

1

Étant donné que vous avez bashsur votre appareil Android, vous pouvez utiliser cette fonction bash:

function androidCodeName {
    androidRelease=$(getprop ro.build.version.release)
    androidCodeName=$(getprop ro.build.version.codename)

    # Time "androidRelease" x10 to test it as an integer
    case $androidRelease in
        [0-9].[0-9]|[0-9].[0-9].|[0-9].[0-9].[0-9])  androidRelease=$(echo $androidRelease | cut -d. -f1-2 | tr -d .);;
        [0-9].) androidRelease=$(echo $androidRelease | sed 's/\./0/');;
        [0-9]) androidRelease+="0";;
    esac

    [ -n "$androidRelease" ] && [ $androidCodeName = REL ] && {
    # Do not use "androidCodeName" when it equals to "REL" but infer it from "androidRelease"
        androidCodeName=""
        case $androidRelease in
        10) androidCodeName+=NoCodename;;
        11) androidCodeName+="Petit Four";;
        15) androidCodeName+=Cupcake;;
        20|21) androidCodeName+=Eclair;;
        22) androidCodeName+=FroYo;;
        23) androidCodeName+=Gingerbread;;
        30|31|32) androidCodeName+=Honeycomb;;
        40) androidCodeName+="Ice Cream Sandwich";;
        41|42|43) androidCodeName+="Jelly Bean";;
        44) androidCodeName+=KitKat;;
        50|51) androidCodeName+=Lollipop;;
        60) androidCodeName+=Marshmallow;;
        70|71) androidCodeName+=Nougat;;
        80|81) androidCodeName+=Oreo;;
        90) androidCodeName+=Pie;;
        100) androidCodeName+=ToBeReleased;;
        *) androidCodeName=unknown;;
        esac
    }
    echo $androidCodeName
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.