安卓版本检查

57

我不是 Android 新手,对版本处理和如何进行条件处理已经很熟悉了,但当我看到 这个 的时候,让我感到困扰…

// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Call some material design APIs here
} else {
    // Implement this feature without material design
}

在任何早于棒棒糖版本的设备上,这行代码都将导致应用程序崩溃,因为 Build.VERSION_CODES.LOLLIPOP 字段不存在... 那么为什么这是文档中推荐的解决方案呢?

我真的很想知道我错过了什么?


你应该尝试这个:https://dev59.com/UW865IYBdhLWcg3wFqhV#3995388 - Adil Malik
1
那个变量是可用的,因为您正在使用具有它的构建工具级别进行构建,而不管设备级别如何。这些在编译时都解析为整数。 - Shooky
请看这里:https://dev59.com/UW865IYBdhLWcg3wFqhV#3993940 - Adil Malik
1
我认为你正在寻找的答案是这个:https://dev59.com/DYXca4cB1Zd3GeqPEzSz#26941714 - Spurdow
根据其他帖子的说法,为了避免崩溃,当代码被编译时,您的静态变量将被替换为适当的整数。 - Brian S
4个回答

60

那么在这种情况下使用这个。

// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Call some material design APIs here
} else {
    // Implement this feature without material design
}

Build.VERSION_CODES.LOLLIPOP = 21


2
@Alexander Zhak的回答是正确的...除非您编译到较低版本并且希望处理更高版本,否则数值没有意义。 - TacB0sS
它是否与此相同?@RequiresApi(Build.VERSION_CODES.LOLLIPOP) - Asif Mushtaq
@AsifMushtaq:请看这个 https://dev59.com/OFkS5IYBdhLWcg3wV1Zy - Rohit5k2

29

你需要使用最新的SDK版本编译你的项目。在编译期间,你的常量将被替换为相应的整数值。无论你在哪个版本的Android上运行应用程序,整数都是相同的。


16

试试这个

 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
       // Marshmallow+
   }else{
        //below Marshmallow
}

Note: Build.VERSION_CODES.LOLLIPOP_MR1==22

    Build.VERSION_CODES.M==23

0

回答有点晚,但今天我在Android Studio 3.4.1上遇到了同样的问题。

解决方法是:

升级到最新的Android SDK。

此外,

在Marshmallow/Android 6之后,Build.VERSION_CODES.xxx的全名被替换为缩写和其他变化。

因此,现在对于Marshmallow,它将是: Build.VERSION_CODES.M

而对于Nougat: Build.VERSION_CODES.N

等等。

在此处阅读有关构建版本代码的更多信息:Android开发人员参考


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