【问题标题】:Programmatically obtain the Android API level of a device?以编程方式获取设备的 Android API 级别?
【发布时间】:2011-02-15 15:55:18
【问题描述】:

我如何才能知道我的设备正在使用哪个 API 级别?

固件版本为 1.6。这是否意味着它使用 API 级别 4?

【问题讨论】:

    标签: android


    【解决方案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数字。对于名字,我猜你可以使用这个反射解决方案:stackoverflow.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。

            【讨论】:

              猜你喜欢
              • 2012-07-27
              • 2014-01-17
              • 1970-01-01
              • 2018-10-07
              • 1970-01-01
              • 2013-01-31
              • 1970-01-01
              • 1970-01-01
              • 2011-01-01
              相关资源
              最近更新 更多