如何查看Android系统版本?

有人知道我如何通过编程检查系统版本(例如1.02.2等)吗?

585250 次浏览

检查# EYZ1。

  • CODENAME:当前的开发代码名,或者字符串“REL”如果这是一个发布版本。
  • INCREMENTAL:底层源代码控制用来表示此构建的内部值。
  • RELEASE:用户可见的版本字符串。

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

文档建议您检查Build.VERSION.SDK_INTBuild.VERSION_CODES中的值。

这很好,只要你意识到Build.VERSION.SDK_INT只是在API级别4中引入的,也就是说Android 1.6(甜甜圈)。所以这不会影响你,但如果你想让你的应用程序运行在Android 1.5或更早的版本,那么你将不得不使用已弃用的Build.VERSION.SDK代替。

使用实例:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Build.VERSION.RELEASE;
这将给你你的版本的实际数字;又名2.3.3或2.2。 使用Build.VERSION的问题。SDK_INT是如果你有一个根手机或自定义rom,你可以有一个非标准的操作系统(也就是我的android是运行2.3.5),在使用Build.VERSION时将返回null。SDK_INT因此build。version。release无论如何都会工作!< / p >
我不能评论这些答案,但Kaushik的回答中有一个巨大的错误: SDK_INT与系统版本不同,实际上是指API Level
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开始的所有设备上执行,因为4是Donut的API级别(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
}

这个例子说明了为什么使用“魔数”是一个坏习惯。

构建。版本是获取这些数据的地方。下面是如何格式化它的代码片段。

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)

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

使用这个类

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

使用这种方法:

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


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

例如,一个特性只适用于api21上面,下面我们修复api21下面的bug

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

要检查设备版本大于或等于Marshmallow,请使用此代码。

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


}

检查其他只需更改VERSION_CODES,如
K代表kitkat,
L代表棒棒糖 N代表牛轧糖等等…

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

因此,为了获得当前安装的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
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";
else if(release < 10)  codeName="Pie";
else if(release >= 10) codeName="Android "+((int)release);//since API 29 no more candy code names
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
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"
else if (release < 10)  codeName = "Pie"
else if (release >= 10) codeName = "Android "+(release.toInt())//since API 29 no more candy code names
return codeName + " v" + release + ", API Level: " + Build.VERSION.SDK_INT
}

它产生的输出示例:

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

假设你的android设备上有bash,你可以使用这个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
}

根据Android文档:

< p > Build.VERSION。用户可见的版本字符串。例如,“1.0”; 或“3.4 b5"或“;bananas"“< / p >

为了得到一个普通的Android版本(2.3,5.1,12.0等),我使用这个函数:

private fun getVersion(): Float {
val release = Build.VERSION.RELEASE
val parsedVersion = "\\d+(\\.\\d+)?".toRegex()
.find(release)?.value
if (parsedVersion.isNullOrBlank()) return 0f
return try {
parsedVersion.toFloat()
} catch (e: Exception) {
0f
}
}