获取当前运行我的应用程序的手机的Android API级别

227

6
如果(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){...} - live-love
4个回答

438

请查阅android.os.Build.VERSION,这是一个静态类,用于存储与 Android 操作系统相关的各种信息。

如果您关心所有可能的版本(包括最初的 Android 版本),例如 minSdkVersion 小于 4,则必须使用 android.os.Build.VERSION.SDK,这是一个可以转换为发布版本整数的字符串。

如果您至少使用 API 版本 4(Android 1.6 Donut),则目前建议获取 API 级别的方法是检查 android.os.Build.VERSION.SDK_INT 的值,它是一个整数。

在任一情况下,您获得的整数将映射到android.os.Build.VERSION_CODES中定义的枚举值中的一个:

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 Oreo MR1
   28                  P                         Android 9 Pie
   29                  Q                         Android 10
  10000                CUR_DEVELOPMENT           Current Development Version

请注意,从Android N到O之间的某个时候,Android SDK开始将CUR_DEVELOPMENT和下一个主要的Android版本的开发者预览别名为相同的SDK_INT值(10000)。


3
@Duraiamuthan.H - 我已经提到,如果您正在使用API版本4或更高版本,则应切换到使用android.os.Build.VERSION.SDK_INT - wkl
更新 5.1.1 不是缺失了吗? - JacksOnF1re
2
@JacksOnF1re Android 5.1.1没有自己的API级别,它只是在22版(Lollipop MR1)之上的一个补丁版本。 - wkl
好的。但我怎么可能区分5.1和5.1.1呢?因为不幸的是它们“修补”了功能。 - JacksOnF1re
2
如果您需要特定的版本,则可以使用android.os.Build.VERSION.Release,该版本指定了您正在处理的确切版本。 - wkl
显示剩余2条评论

143
Integer.valueOf(android.os.Build.VERSION.SDK);

数值为:

Platform Version   API Level
Android 9.0        28
Android 8.1        27
Android 8.0        26
Android 7.1        25
Android 7.0        24
Android 6.0        23
Android 5.1        22
Android 5.0        21
Android 4.4W       20
Android 4.4        19
Android 4.3        18
Android 4.2        17
Android 4.1        16
Android 4.0.3      15
Android 4.0        14
Android 3.2        13
Android 3.1        12
Android 3.0        11
Android 2.3.3      10
Android 2.3        9
Android 2.2        8
Android 2.1        7
Android 2.0.1      6
Android 2.0        5
Android 1.6        4
Android 1.5        3
Android 1.1        2
Android 1.0        1

注意: 如果<uses-sdk android:minSdkVersion="3" />,请勿使用android.os.Build.VERSION.SDK_INT

Build.VERSION.SDK_INT 是自SDK 4(Donut 1.6)开始引入的,因此在所有运行Android 1.5及更低版本的设备上使用会导致异常。


1
还有一个技巧,你可以使用它并使用反射来查看SDK_INT是否存在。如果不存在,则版本<= 3,并且至少对于我的目的来说,这已经足够了。 - Robert Massaioli
完美运行。同时还有一些“新”的:http://developer.android.com/reference/android/os/Build.VERSION_CODES.html - Stefan Hoth
3
“android.os.Build.VERSION.SDK” 在棒棒糖版本中已经被弃用,这意味着“你仍然可以使用它,但不要指望它,因为在未来的软件版本中我们可能会用其他东西来取代它(或者完全移除它)。” - Durai Amuthan.H
2
@Duraiamuthan.H,你说得完全正确。我不认识任何仍然支持API 3设备的人,所以在我看来,android.os.Build.VERSION.SDK_INT是检查版本的最佳选项。 - rude
@rude - 你是正确的。我也这么想。 - Durai Amuthan.H

47

3
这个解决方案不太好,因为这个常量自API Level 4以来就存在。 - Felipe
@Felipe Android不再维护API级别低于15的设备上的数据,因为这些设备所占比例非常小。除非您明确地针对非常旧的设备,否则此解决方案是可以接受的。 - James Riordan

-14
尝试这个:Float.valueOf(android.os.Build.VERSION.RELEASE) <= 2.1

2
该值未被定义为浮点数,例如“2.1-update1”。 - Mark Renouf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接