2

假设我有一个针对 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

2 回答 2

1

我已经在评论中回答了这个问题,但我想我也可以把它写下来作为答案。

Build.VERSION_CODE 给你的值取决于你编译项目的 API 级别,所以如果你在 API 级别 10 上编译它,当你调用 Build.VERSION_CODES.ICE_CREAM_SANDWICH 时你当然不会得到任何返回值,但是如果你编译它在 API 级别 14 上,您将获得正确的值。

因此,如果编译级别低于您尝试调用的内部版本号,它将返回 null。

于 2012-10-06T01:01:54.677 回答
1

正如 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.

于 2012-10-06T05:09:53.917 回答