642

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

4

12 回答 12

1160

如 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

于 2010-10-15T09:01:31.923 回答
174

很容易:

   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
于 2016-01-28T22:39:33.890 回答
87
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;
于 2012-03-07T14:49:27.980 回答
37

尝试这个:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
     // only for gingerbread and newer versions
 }
于 2017-03-20T22:35:26.297 回答
32

考虑到所有这些,这是我用来检测设备是否具有 Froyo 或更新的 Android 操作系统(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;
}

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

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

让我知道代码是否不适合您。

于 2012-07-27T08:01:10.670 回答
9

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

于 2010-08-06T12:44:28.747 回答
6

Android 1.6及更高版本支持 SDK.INT

所有版本均支持 SDK

所以我这样做:

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

归功于:CommonsWare对此答案

于 2019-10-30T01:11:08.833 回答
3

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

于 2010-08-06T12:41:19.650 回答
2

我通常更喜欢将这些代码添加到一个函数中以获取 Android 版本:

int whichAndroidVersion;

whichAndroidVersion= Build.VERSION.SDK_INT;
textView.setText("" + whichAndroidVersion); //If you don't use "" then app crashes.

例如,上面的代码现在会将我的 textView 中的文本设置为“29”。

于 2021-01-15T06:48:47.713 回答
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();
}
于 2014-05-14T09:18:18.850 回答
-2

我改进了我使用的代码

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;
}
于 2014-05-14T09:24:17.017 回答
-4

像这样:

String versionRelease = BuildConfig.VERSION_NAME;

versionRelease :- 2.1.17

请确保您的导入包正确(import package your_application_package_name,否则将无法正常工作)。

于 2019-05-09T10:29:03.307 回答