【问题标题】:Check Android build project target API level at runtime [duplicate]在运行时检查Android构建项目目标API级别[重复]
【发布时间】:2014-01-07 13:07:59
【问题描述】:

我有一个应用程序,当我在 API 18 或 19 上运行它时,它的行为有所不同。这不是问题,我知道为什么会这样。

但是,我想编写一个代码来处理这两个版本。

有什么方法可以在运行时获取我的应用程序是使用哪个 API 构建的?具体来说,如果我使用这些 API 构建我的应用程序,我希望获得 18 或 19。

编辑

这似乎是一个重复的问题。我以为 BUILD_VERSION 是另外一回事,因为当我将两个版本编译为 API 18 和 19 并打印版本时,我收到 18。它看起来像另一个问题(虽然我指定了 API 19,但它是根据 18 编译的)。

我发现问题出在模拟器配置上。

【问题讨论】:

    标签: android android-build


    【解决方案1】:

    我没有完全理解你的问题。但是,如果您想检查您的应用正在使用哪个构建版本,然后采取相应的行动,您可以使用以下内容。

    if(Build.VERSION.SDK_INT == 18 ){
        // Do some stuff
    }
    else if (Build.VERSION.SDK_INT == 19) {
        // Do some stuff
    }
    else{
        // Do some stuff
    }
    

    【讨论】:

      【解决方案2】:

      Android 文档提供了一些处理此问题的how to load bitmaps effectively 示例代码。

      代码在类Utils 中定义静态方法,当它需要知道应用程序在哪个平台上运行时,它会引用这些静态方法。这样做的好处是您可以重用函数调用,而不是一遍又一遍地重写长的条件语句。代码如下所示:

      public static boolean hasFroyo() {
          // Can use static final constants like FROYO, declared in later versions
          // of the OS since they are inlined at compile time. This is guaranteed behavior.
          return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;
      }
      
      public static boolean hasGingerbread() {
          return Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD;
      }
      
      public static boolean hasHoneycomb() {
          return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
      }
      
      public static boolean hasHoneycombMR1() {
          return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1;
      }
      
      public static boolean hasJellyBean() {
          return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
      }
      
      public static boolean hasKitKat() {
          return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
      }
      

      【讨论】:

        【解决方案3】:
        android.os.Build.VERSION.SDK_INT
        

        【讨论】:

          【解决方案4】:

          查看此链接

          Build Version Codes

          所以你可以如下使用...

          int thisDevicesApi =Build.VERSION.SDK_INT;
          
          if (thisDevicesApi <=Build.VERSION_CODES.GINGERBREAD) { 
               //for example
              //do something
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-02-04
            • 1970-01-01
            • 1970-01-01
            • 2019-04-26
            • 2012-12-08
            • 1970-01-01
            • 1970-01-01
            • 2020-01-03
            相关资源
            最近更新 更多