以编程方式检索Android API版本

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

409011 次浏览

明白了。它使用了Context类的getApplicationInfo()方法。

android.os.Build.VERSION.SDK应该给出API级别的值。你可以很容易地在android文档中找到api级别到android版本的映射。我认为,8代表2.2,7代表2.1,以此类推。

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

< a href = " http://developer.android.com/reference/android/os/Build.VERSION.html SDK_INT " > # EYZ0 < / >

与这个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文档是在这里在这里

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

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

String androidOS = Build.VERSION.RELEASE;

综上所述,以下是我用来检测设备是否有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;
}

显然,你可以修改if条件来考虑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;
}
}

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

我更喜欢把版本作为数字来处理,而不是这样写:

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

我改进了我使用的代码

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

很简单:

   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

试试这个:

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

是这样的:

String versionRelease = BuildConfig.VERSION_NAME;


versionRelease :- 2.1.17

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

SDK。Android 1.6及以上支持INT

SDK支持所有版本

所以我这样做:

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

credit to: CommonsWare over this 回答

我通常喜欢在函数中添加这些代码来获得Android版本:

int whichAndroidVersion;


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

例如,上面的代码将文本设置到我的textView为“;29"现在。