以编程方式获取设备的 Android API 级别?
Posted
技术标签:
【中文标题】以编程方式获取设备的 Android API 级别?【英文标题】:Programmatically obtain the Android API level of a device? 【发布时间】:2011-02-15 15:55:18 【问题描述】:我如何才能知道我的设备正在使用哪个 API 级别?
固件版本为 1.6。这是否意味着它使用 API 级别 4?
【问题讨论】:
【参考方案1】:您可以通过系统常量 (Build.VERSION.SDK_INT
) 以编程方式获取 API 级别。例如,您可以通过以下方式运行一些需要更新 API 的代码(如果当前设备的 API 级别至少为 4,它将执行)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.DONUT)
要获得用户可见的 android 版本,请使用:
Build.VERSION.RELEASE
【讨论】:
【参考方案2】:你需要什么:http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
SDK_INT value Build.VERSION_CODES Human Version Name
1 BASE Android 1.0 (no codename)
2 BASE_1_1 Android 1.1 Petit Four
3 CUPCAKE Android 1.5 Cupcake
4 DONUT Android 1.6 Donut
5 ECLAIR Android 2.0 Eclair
6 ECLAIR_0_1 Android 2.0.1 Eclair
7 ECLAIR_MR1 Android 2.1 Eclair
8 FROYO Android 2.2 Froyo
9 GINGERBREAD Android 2.3 Gingerbread
10 GINGERBREAD_MR1 Android 2.3.3 Gingerbread
11 HONEYCOMB Android 3.0 Honeycomb
12 HONEYCOMB_MR1 Android 3.1 Honeycomb
13 HONEYCOMB_MR2 Android 3.2 Honeycomb
14 ICE_CREAM_SANDWICH Android 4.0 Ice Cream Sandwich
15 ICE_CREAM_SANDWICH_MR1 Android 4.0.3 Ice Cream Sandwich
16 JELLY_BEAN Android 4.1 Jellybean
17 JELLY_BEAN_MR1 Android 4.2 Jellybean
18 JELLY_BEAN_MR2 Android 4.3 Jellybean
19 KITKAT Android 4.4 KitKat
20 KITKAT_WATCH Android 4.4 KitKat Watch
21 LOLLIPOP Android 5.0 Lollipop
22 LOLLIPOP_MR1 Android 5.1 Lollipop
23 M Android 6.0 Marshmallow
24 N Android 7.0 Nougat
25 N_MR1 Android 7.1.1 Nougat
26 O Android 8.0 Oreo
27 O_MR1 Android 8.1 Oreo MR1
28 P Android 9 Pie
29 Q Android 10 Q
10000 CUR_DEVELOPMENT Current Development Version
【讨论】:
我认为这个列表可能需要更新 更新列表【参考方案3】:对于 API 级别 >= 4,您可以使用 Build.VERSION.SDK_INT
private String getAndroidVersion(int sdk)
switch (sdk)
case 1: return "(Android 1.0)";
case 2: return "Petit Four" + "(Android 1.1)";
case 3: return "Cupcake" + "(Android 1.5)";
case 4: return "Donut" + "(Android 1.6)";
case 5: return "Eclair" + "(Android 2.0)";
case 6: return "Eclair" + "(Android 2.0.1)";
case 7: return "Eclair" + "(Android 2.1)";
case 8: return "Froyo" + "(Android 2.2)";
case 9: return "Gingerbread" + "(Android 2.3)";
case 10: return "Gingerbread" + "(Android 2.3.3)";
case 11: return "Honeycomb" + "(Android 3.0)";
case 12: return "Honeycomb" + "(Android 3.1)";
case 13: return "Honeycomb" + "(Android 3.2)";
case 14: return "Ice Cream Sandwich" + "(Android 4.0)";
case 15: return "Ice Cream Sandwich" + "(Android 4.0.3)";
case 16: return "Jelly Bean" + "(Android 4.1)";
case 17: return "Jelly Bean" + "(Android 4.2)";
case 18: return "Jelly Bean" + "(Android 4.3)";
case 19: return "KitKat" + "(Android 4.4)";
case 20: return "KitKat Watch" + "(Android 4.4)";
case 21: return "Lollipop" + "(Android 5.0)";
case 22: return "Lollipop" + "(Android 5.1)";
case 23: return "Marshmallow" + "(Android 6.0)";
case 24: return "Nougat" + "(Android 7.0)";
case 25: return "Nougat" + "(Android 7.1.1)";
case 26: return "Oreo" + "(Android 8.0)";
case 27: return "Oreo" + "(Android 8.1)";
case 28: return "Pie" + "(Android 9.0)";
case 29: return "Q" + "(Android 10.0)";
case 30: return "R" + "(Android 11.0)";
default: return "";
用法
String android_os = getAndroidVersion(android.os.Build.VERSION.SDK_INT);
【讨论】:
这没有意义,首先你指定一个构建限制但提供以前的api的情况...... Build.VERSION.RELEASE 会给你数字版本,Build.Version.SDK_INT 会给你一个更好的analityc数字。对于名字,我猜你可以使用这个反射解决方案:***.com/a/13258693/4391450 @AxelH 感谢分享链接。我的方法也被一些人在同一个帖子和其他一些帖子中使用,只是为了简单。 是的,我明白了这个想法和“可爱”的部分,但我不喜欢每年都因为新的 API 更新方法。【参考方案4】:非常简单:
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 samsung
model SM-T310
version 19
versionRelease 4.4.2
【讨论】:
【参考方案5】:获取您设备的当前 API:
int MyDeviceAPI = Build.VERSION.SDK_INT;
【讨论】:
【参考方案6】:在第一个版本中使用Build.VERSION.SDK
String myAPI= Build.VERSION.SDK;
但现在已弃用!
SDK API 级别 4 已弃用此字段。使用 SDK_INT 轻松 将其作为整数。
现在你必须使用:SDK_INT在 API 级别 4 中添加:
int myAPI = Build.VERSION.SDK_INT;
SDK_INT 用户可见的 SDK 版本的框架;这是可能的 值在 Build.VERSION_CODES 中定义。
更多信息:
http://developer.android.com/reference/android/os/Build.VERSION.html
【讨论】:
【参考方案7】:您可以获取设备的信息,如下所示。
Log.d(TAG, "RELEASE : " + Build.VERSION.RELEASE);
Log.d(TAG, "SDK : " + Build.VERSION.SDK_INT);
并且可以从操作系统获取Android版本代码历史记录。
for (Field field : Build.VERSION_CODES.class.getDeclaredFields())
field.setAccessible(true);
Log.d(TAG, field.get(this) + " -> " + field.getName());
这是输出。
RELEASE : 5.1.1
SDK : 22
1 -> BASE
2 -> BASE_1_1
3 -> CUPCAKE
10000 -> CUR_DEVELOPMENT
4 -> DONUT
5 -> ECLAIR
6 -> ECLAIR_0_1
7 -> ECLAIR_MR1
8 -> FROYO
9 -> GINGERBREAD
10 -> GINGERBREAD_MR1
11 -> HONEYCOMB
12 -> HONEYCOMB_MR1
13 -> HONEYCOMB_MR2
14 -> ICE_CREAM_SANDWICH
15 -> ICE_CREAM_SANDWICH_MR1
16 -> JELLY_BEAN
17 -> JELLY_BEAN_MR1
18 -> JELLY_BEAN_MR2
19 -> KITKAT
20 -> KITKAT_WATCH
21 -> L
21 -> LOLLIPOP
22 -> LOLLIPOP_MR1
所以,把这些和official version list结合起来。
API VERSION_CODE VERSION CODE_NAME
1 BASE 1 (no code name)
2 BASE_1_1 1.1 (no code name)
3 CUPCAKE 1.5 Cupcake
4 DONUT 1.6 Donut
5 ECLAIR 2 Eclair
6 ECLAIR_0_1 2.0.1 Eclair
7 ECLAIR_MR1 2.1 Eclair
8 FROYO 2.2.x Froyo
9 GINGERBREAD 2.3 - 2.3.2 Gingerbread
10 GINGERBREAD_MR1 2.3.3 - 2.3.7 Gingerbread
11 HONEYCOMB 3 Honeycomb
12 HONEYCOMB_MR1 3.1 Honeycomb
13 HONEYCOMB_MR2 3.2.x Honeycomb
14 ICE_CREAM_SANDWICH 4.0.1 - 4.0.2 Ice Cream Sandwich
15 ICE_CREAM_SANDWICH_MR1 4.0.3 - 4.0.4 Ice Cream Sandwich
16 JELLY_BEAN 4.1.x Jelly Bean
17 JELLY_BEAN_MR1 4.2.x Jelly Bean
18 JELLY_BEAN_MR2 4.3.x Jelly Bean
19 KITKAT 4.4 - 4.4.4 KitKat
20 KITKAT_WATCH 4.4W KitKat Watch
21 LOLLIPOP 5 Lollipop
22 LOLLIPOP_MR1 5.1 Lollipop
23 M 6 Marshmallow
24 N 7 Nougat
25 N_MR1 7.1 Nougat
This 说,API25 的 version_code 是 N_MR1。
【讨论】:
以上是关于以编程方式获取设备的 Android API 级别?的主要内容,如果未能解决你的问题,请参考以下文章
如何在同一网络上以编程方式获取其他支持Wifi的设备的IP地址?
以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?
如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?