以编程方式检索Android API版本

时间:2010-08-06 12:32:32

标签: android android-api-levels

有没有办法获得手机当前正在运行的API版本?

10 个答案:

答案 0 :(得分:989)

如Android文档中所述,手机正在运行的SDK级别(整数)位于:

android.os.Build.VERSION.SDK_INT

与此int对应的类位于android.os.Build.VERSION_CODES类中。

代码示例:

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
}

编辑:此SDK_INT自Donut(Android 1.6 / API4)开始提供,因此请确保您的应用程序与Cupcake(Android 1.5 / API3)不兼容,当您使用它或您的应用程序时崩溃(感谢程序员Bruce的精确度)。

相应的Android文档是herehere

答案 1 :(得分:117)

非常简单:

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

输出:

E/MyActivity:   manufacturer ManufacturerX
                model SM-T310 
                version 19 
                versionRelease 4.4.2

答案 2 :(得分:78)

Build.VERSION.RELEASE;

这将为您提供您的版本的实际数字;又名2.3.3或2.2。 使用Build.VERSION.SDK_INT的问题是,如果你有一个root的手机或自定义ROM,你可能有一个非标准的操作系统(也就是我的android运行2.3.5),当使用Build.VERSION.SDK_INT时将返回null所以无论是否使用标准的Android版本,Build.VERSION.RELEASE都能正常工作!

要使用它,你可以这样做;

String androidOS = Build.VERSION.RELEASE;

答案 3 :(得分:31)

考虑到所有说法,这里是用于检测设备是否具有Froyo或更新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;
}

显然,如果条件要考虑1.0& 1.5版本的Android,以防您需要通用检查器。你可能会得到这样的结论:

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

如果代码不适合您,请告诉我。

答案 4 :(得分:21)

试试这个:

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

答案 5 :(得分:9)

android.os.Build.VERSION.SDK应该为您提供API级别的值。你可以在android文档中轻松找到从api级到android版的映射。我相信,8是2.2,7是2.1,依此类推。

答案 6 :(得分:4)

知道了。它使用getApplicationInfo()类的Context方法。

答案 7 :(得分:1)

它的编码效果很好

String versionRelease = BuildConfig.VERSION_NAME;

versionRelease :- 2.1.17

答案 8 :(得分:0)

我更喜欢将版本作为数字处理比我写的更容易:

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

答案 9 :(得分:0)

SDK.INT受 Android 1.6 及更高版本

支持

所有版本

均支持SDK

我这样做:

String sdk_version_number = android.os.Build.VERSION.SDK;

在此CommonsWare上的信用额为:answer