有人知道如何以编程方式检查系统版本(例如1.0、2.2等)吗?
如何使用的示例:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
CODENAME
: 当前开发代号,如果是发布版则为字符串"REL"。INCREMENTAL
: 底层源代码控制所使用的内部值来表示此版本。RELEASE
: 用户可见的版本号字符串。
RELEASE
,它的值为 9
。 - kenjiunoBuild.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)"
要检查设备版本是否大于或等于Marshmallow,请使用此代码。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){
}
要检查其他版本,只需更改 VERSION_CODES,例如:
K 代表 KitKat,
L 代表 Lollipop,
N 代表 Nougat 等等...
Build.VERSION.RELEASE;
那将给您版本的实际数字; 即 2.3.3 或 2.2。
使用 Build.VERSION.SDK_INT 的问题在于,如果您有一个rooted手机或自定义ROM,则可能有一个非标准操作系统(也就是我的安卓正在运行2.3.5),使用 Build.VERSION.SDK_INT 将返回null,因此 Build.VERSION.RELEASE 将始终有效!您可以查看Build.VERSION
来了解Android版本。
文档建议您将Build.VERSION.SDK_INT
与Build.VERSION_CODES
中的值进行比较。
只要您意识到Build.VERSION.SDK_INT
仅在API Level 4中引入,也就是Android 1.6 (Donut)。这不会影响您使用,但如果您想让您的应用程序运行在Android 1.5或更早的版本上,则必须使用已弃用的Build.VERSION.SDK
代替。
我无法评论这些答案,但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是冰激凌三明治的API级别,而系统版本是4.0。因此,如果你写4.0,你的代码将在从甜甜圈开始的所有设备上执行,因为4是甜甜圈的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
}
这个例子说明为什么使用“魔数”是一个不好的习惯。
if(Build.VERSION.SDK_INT >= 15){
。 - erdomester请注意,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;
}
Kotlin
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
}
它所产生的输出示例:
Marshmallow v6.0,API级别:23
if(Build.VERSION.SDK_INT >= 21) {
//only api 21 above
}else{
//only api 21 down
}
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you like.
}