【问题标题】:Get Android API level of phone currently running my application [duplicate]获取当前运行我的应用程序的手机的Android API级别[重复]
【发布时间】:2011-04-28 23:30:20
【问题描述】:

可能重复:
Programmatically obtain the Android API level of a device?

如何获得当前运行我的应用程序的手机的 Api 级别?我确信它很简单,但我找不到它,因为我所有的搜索都会带来大量垃圾。

【问题讨论】:

  • if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {...}

标签: android android-api-levels


【解决方案1】:

检查android.os.Build.VERSION,这是一个静态类,包含有关系统正在运行的 Android 操作系统的各种信息。

如果您关心所有可能的版本(返回原始 Android 版本),如 minSdkVersion 设置为小于 4 的任何值,那么您将不得不使用 android.os.Build.VERSION.SDK,这是一个 String,可以转换为释放的整数。

如果您至少使用 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)。

【讨论】:

  • 谢谢你只是看不到它;)
  • android.os.Build.VERSION.SDK 在棒棒糖中已弃用,这意味着“您仍然可以使用它,但不要指望它,因为我们可能会在未来的软件中用其他东西替换它(或完全删除它)发布。”
  • @Duraiamuthan.H - 我已经提到,如果您使用 API 版本 4 或更高版本,您应该改用 android.os.Build.VERSION.SDK_INT
  • @JacksOnF1re Android 5.1.1 没有自己的 API 级别,它只是版本 22 (Lollipop MR1) 之上的补丁版本。
  • @JacksOnF1re 如果您需要特定版本,则使用android.os.Build.VERSION.Release 指定您正在处理的确切版本。
【解决方案2】:
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

您将在所有搭载 Android 1.5 及更低版本的设备上遇到异常,因为 Build.VERSION.SDK_INT 自 SDK 4 (Donut 1.6) 起。

【讨论】:

  • 还有一个技巧,反正你可以用,用反射看看SDK_INT是否存在。如果不是,则版本为
  • 完美运行。同时还有“几个”新的:developer.android.com/reference/android/os/…
  • android.os.Build.VERSION.SDK 在棒棒糖中已弃用,这意味着“您仍然可以使用它,但不要指望它,因为我们可能会在未来的软件中用其他东西替换它(或完全删除它)发布。”
  • @Duraiamuthan.H 你是完全正确的。我不知道还有谁仍然支持使用 API 3 的设备,所以android.os.Build.VERSION.SDK_INT 是检查 IMO 版本的最佳选择。
  • @rude - 你是对的。我是这么认为的。
【解决方案3】:

android.os.Build.VERSION.SDK_INT

您可以在此处找到可能的值:VERSION_CODES

【讨论】:

  • 这个解决方案不太好,因为这个常量是从 API 级别 4 开始的。
  • @Felipe Android 不再在 API 级别 15 以下的设备上维护数据,因为它只占设备的一小部分。除非您明确针对非常旧的设备,否则此解决方案很好。
【解决方案4】:

试试这个:Float.valueOf(android.os.Build.VERSION.RELEASE)

【讨论】:

  • 此值未定义为浮点数,例如“2.1-update1”
猜你喜欢
  • 2014-10-08
  • 2018-09-19
  • 2016-03-28
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多