Как я могу проверить системную версию Android? - PullRequest
453 голосов
/ 22 июня 2010

Кто-нибудь знает, как можно программно проверить версию системы (например, 1.0, 2.2 и т. Д.)?

Ответы [ 12 ]

761 голосов
/ 10 сентября 2011

Пример использования:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
     // only for gingerbread and newer versions
}
401 голосов
/ 22 июня 2010

Чек android.os.Build.VERSION.

  • CODENAME: текущее кодовое имя разработки или строка "REL", если это сборка выпуска.
  • INCREMENTAL: внутреннее значение, используемое базовым источником управления для представления этой сборки.
  • RELEASE: видимая пользователем строка версии.
79 голосов
/ 14 сентября 2014

Build.Version - это место для получения этих данных. Вот фрагмент кода для его форматирования.

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

Похоже на "Android SDK: 19 (4.4.4)"

59 голосов
/ 07 марта 2012
Build.VERSION.RELEASE;

Это даст вам фактические номера вашей версии; ака 2.3.3 или 2.2. Проблема с использованием Build.VERSION.SDK_INT заключается в том, что если у вас есть рутированный телефон или пользовательский rom, у вас может быть не стандартная ОС (она же мой Android работает под управлением 2.3.5), и при использовании Build.VERSION.SDK_INT будет возвращаться ноль. так что Build.VERSION.RELEASE будет работать несмотря ни на что!

46 голосов
/ 27 декабря 2016

Для проверки версии устройства, которая больше или равна Marshmallow, используйте этот код.

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

    }

для проверки других просто измените VERSION_CODES, например,
K для kitkat,
L дляloolipop N для нуги и так далее ...

43 голосов
/ 01 декабря 2010

Вы можете узнать версию Android, посмотрев на Build.VERSION.

В документации рекомендуется проверять Build.VERSION.SDK_INT на значения в Build.VERSION_CODES.

Это хорошо, если вы понимаете, что Build.VERSION.SDK_INT был введен только в API уровня 4, то есть Android 1.6 (Пончик). Так что это не повлияет на вас, но если вы хотите, чтобы ваше приложение работало на Android 1.5 или более ранней версии, вам придется использовать устаревшую Build.VERSION.SDK.

28 голосов
/ 06 декабря 2012

Я не могу комментировать ответы, но в ответе Каушика есть огромная ошибка: SDK_INT не совпадает с версией системы, но фактически относится к уровню API.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
    //this code will be executed on devices running ICS or later
}

Значение Build.VERSION_CODES.ICE_CREAM_SANDWICH равно 14. 14 - это уровень API Ice Cream Sandwich, в то время как системная версия - 4.0.Поэтому, если вы напишите 4.0, ваш код будет выполняться на всех устройствах, начиная с Donut, потому что 4 - это уровень API Donut (Build.VERSION_CODES.DONUT равно 4).

if(Build.VERSION.SDK_INT >= 4.0){
    //this code will be executed on devices running on DONUT (NOT ICS) or later
}

Этот пример является причиной, почему«магическое число» - вредная привычка.

16 голосов
/ 29 ноября 2016

Например, функция работает только для api21 до следующего исправления ошибок в api21 down

    if(Build.VERSION.SDK_INT >= 21) {
    //only api 21 above
    }else{
   //only api 21 down
    }
14 голосов
/ 12 марта 2017

Имейте в виду, что Build.VERSION.SDK_INT не надежен, о нем упоминает @ Falcon165o, и недавно я тоже столкнулся с ним.

Итак, чтобы получить данные String (на основев списке версий Android ) установленного на данный момент Android, я сделал код, подобный этому:

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
}

Пример выходных данных:

Marshmallow v6.0, уровень API: 23

7 голосов
/ 22 июня 2015
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you  like.
}
...