假设我有一个针对 4.0 的项目,但支持低至 2.2 的版本。在 2.2 设备上运行以下命令时,我得到了正确的值,即 14。
Integer version = Build.VERSION_CODES.ICE_CREAM_SANDWICH
对我来说,这似乎很奇怪,我期待一个空值或错误,因为设备使用的是 2.2 API,并且根据 2.2 Build.VERSION_CODES类,没有提到int ICE_CREAM_SANDWHICH = 14
常量。我在这里想念什么?
假设我有一个针对 4.0 的项目,但支持低至 2.2 的版本。在 2.2 设备上运行以下命令时,我得到了正确的值,即 14。
Integer version = Build.VERSION_CODES.ICE_CREAM_SANDWICH
对我来说,这似乎很奇怪,我期待一个空值或错误,因为设备使用的是 2.2 API,并且根据 2.2 Build.VERSION_CODES类,没有提到int ICE_CREAM_SANDWHICH = 14
常量。我在这里想念什么?
我已经在评论中回答了这个问题,但我想我也可以把它写下来作为答案。
Build.VERSION_CODE 给你的值取决于你编译项目的 API 级别,所以如果你在 API 级别 10 上编译它,当你调用 Build.VERSION_CODES.ICE_CREAM_SANDWICH 时你当然不会得到任何返回值,但是如果你编译它在 API 级别 14 上,您将获得正确的值。
因此,如果编译级别低于您尝试调用的内部版本号,它将返回 null。
正如 Ahmad 所说,您需要使用 API 级别 14 编译代码才能使用常量“ICE_CREAM_SANDWICH”。问题是在编译时这些常量被更改为它们各自的值。这意味着在运行时任何设备都不会看到“ICE_CREAM_SANDWICH”常量,而是值 14(即使它是安装了 Froyo 2.2 的设备)。
换句话说,在您的代码中:
Integer version = Build.VERSION_CODES.ICE_CREAM_SANDWICH;
在设备中:
Integer version = 14;
It is not exactly like that, but you get the idea.