有谁知道如何以编程方式检查系统版本(例如
1.0
,2.2
等)?
如何使用它的示例:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
android.os.Build.VERSION
。
:当前开发代号,如果这是发布版本,则为字符串“REL”。CODENAME
:底层源代码管理用于表示此构建的内部值。INCREMENTAL
:用户可见的版本字符串。RELEASE
Build.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 代表奇巧,
L 代表 loolipop
N 代表牛轧糖等等...
Build.VERSION.RELEASE;
这将为您提供版本的实际编号;又名 2.3.3 或 2.2。 使用 Build.VERSION.SDK_INT 的问题是,如果您有 root 手机或自定义 rom,则可能有非标准操作系统(又名我的 Android 正在运行 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级别4(即Android 1.6(Donut))中引入,就可以了。所以这不会影响你,但如果你确实希望你的应用程序在 Android 1.5 或更早版本上运行,那么你必须使用已弃用的 Build.VERSION.SDK
来代替。
我无法对答案发表评论,但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
}
这个例子说明了为什么使用“幻数”是一个坏习惯。
请注意,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
例如,某个功能仅适用于 api21 up 以下我们修复 api21 down 中的错误
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.
}
使用此方法:
public static String getAndroidVersion() {
String versionName = "";
try {
versionName = String.valueOf(Build.VERSION.RELEASE);
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
使用这个类
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;
}
}
鉴于您的 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文档:
Build.VERSION.RELEASE –“用户可见的版本字符串。例如,“1.0” 或“3.4b5”或“香蕉”
为了获得普通的 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
}
}