如何查看Android的系统版本?


494

有谁知道我怎么能检查系统版本(例如1.02.2等)编程?


是否有在Android Studio中添加此检查的快捷方式(代码段或实时模板)
Basheer AL-MOMANI

Answers:


420

检查android.os.Build.VERSION

  • CODENAME:当前的开发代号,如果是发行版,则为字符串“ REL”。
  • INCREMENTAL:基础源控件用来表示此内部版本的内部值。
  • RELEASE:用户可见的版本字符串。

72
关于如何使用它的任何例子?
乔纳森

1
困难的是,SDK_INT已在API级别4中定义,并且在1-3上使用失败。有人知道如何很好地处理吗?
Zordid 2012年

从API 1开始可以使用SDK,对于所有版本也可以使用INCREMENTAL。
nuala 2012年

1
Build.VERSION.RELEASE是一个字符串,因此您可以根据需要使用此字符串。
paiego 2012年

8
不用担心,今天甚至连穴居人都没有使用android API 1-3。@Zordid
Josh

811

示例如何使用它:

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

24
我完全忽略了任何比Eclair(7),Android 2.1更旧的版本,很快我们也停止了对2.1的支持。但是您可以使用SDK而不是SDK_INT。
ATom 2012年

12
SDK已在API级别4中弃用。请改用SDK_INT。
erdomester

我有一个问题:如果它运行在GINGERBREAD之前的系统上,那么我们将无法获取android.os.Build.VERSION_CODES.GINGERBREAD,该应用会崩溃吗?
HongchaoZhang

不,因为在Java构建过程中,GINGERBREAD将仅替换为数字。仅需要使用较大的Android编译版本。
ATom

97

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


63
Build.VERSION.RELEASE;

这样可以为您提供实际的版本号;又名2.3.3或2.2。使用Build.VERSION.SDK_INT的问题是,如果您拥有一部扎根的手机或自定义rom,则可以使用非标准操作系统(又名我的android运行2.3.5),并且在使用Build.VERSION.SDK_INT时将返回null因此无论如何,Build.VERSION.RELEASE都可以工作!


在SDK中:“用户可见的版本字符串。例如“ 1.0”或“ 3.4b5”。....“ 3.4b5”如何确定它是哪个版本号?
davs 2012年

整个答案2.3.3是版本号,2.2或2.3.5(在我的情况下为自定义rom)。这是整个操作系统的版本号。
Falcon165o 2012年

它返回相同的菜单>>设置>>关于手机。应该将其标记为“固件版本”或有影响的名称。
Falcon165o 2012年

58
一个int如何返回null?SDK_INT是原始int。
Zsolt Safrany

57

要检查大于或等于棉花糖的设备版本,请使用此代码。

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

    }

要修改其他人,只需更改VERSION_CODES,例如,将
K 更改为kitkat,将
L 更改为loolipop,将N 更改为牛轧糖,等等。


48

您可以在中找到Android版本Build.VERSION

文档建议您对照Build.VERSION.SDK_INT中的值进行检查Build.VERSION_CODES

只要您意识到这Build.VERSION.SDK_INT仅是在API级别4中引入的,即Android 1.6(Donut),就可以了。因此,这不会影响您,但是如果您确实希望您的应用程序在Android 1.5或更早的版本上运行,则必须使用不推荐使用的版本Build.VERSION.SDK


30

我无法对答案发表评论,但是Kaushik的答案存在一个严重错误: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是Ice Cream Sandwich的API级别,而系统版本是4.0。因此,如果您编写4.0,您的代码将在所有从Donut开始的设备上执行,因为Donut的API级别为Build.VERSION_CODES.DONUT4 (等于4)。

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

此示例是为什么使用“幻数”是一种不良习惯的原因。


7
实际上,Build.VERSION.SDK_INT是API级别,而不是版本代码。因此,正确的路线是if(Build.VERSION.SDK_INT >= 15){
erdomester 2014年

如果我告诉您版本代码与API级别相同并且ICE_CREAM_SANDWICH的SDK_INT是14而不是15怎么办?@erdomester
Beyondo

19

例如,以下功能仅适用于api21,以下我们修复了api21的错误

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

19

请注意,Build.VERSION.SDK_INT是不可靠的,@ Falcon165o提到了它,最近我也遇到了那个。

因此,要获取当前安装的android 的String数据(基于Android版本list),我编写了如下代码:

爪哇

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

科特林

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
}

它产生的输出示例:

棉花糖v6.0,API等级:23


1
当发行版包含多个点时,此代码在Double.parseDouble(Build.VERSION.RELEASE)崩溃。例如7.1.1
米克洛什Keresztes

@MiklósKeresztes感谢您提供有益的评论-我已经确定了答案。
Nikita Kurtin

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

您能否详细说明您的答案,并提供有关您提供的解决方案的更多说明?
abarisone 2015年

3

使用这个课程

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

使用此方法:

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

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

这将有什么帮助?
samuel owino

1

如果您bash在Android设备上拥有,则可以使用以下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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.