【发布时间】:2015-04-28 09:50:45
【问题描述】:
使用以下方法获取当前设备 API 级别相当简单直接:
Build.VERSION.SDK_INT
并且使用它也很容易获得Build.VERSION_CODES的版本名称
public static String getDisplayOS() {
Field[] fields = Build.VERSION_CODES.class.getFields();
for (Field field : fields) {
String fieldName = field.getName();
int fieldValue = -1;
try {
fieldValue = field.getInt(new Object());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
if (fieldValue == Build.VERSION.SDK_INT) {
return fieldName;
}
}
return "";
}
问题在于它给出的值如下:
JELLY_BEAN_MR1
HONEYCOMB_MR2
现在,我可以自己手动添加操作系统版本字符串列表 - 这很好,但是一旦我们通过 API 22,我将不得不更新产品以添加一些额外的字符串。
我的大脑告诉我必须有一个内部字段在操作系统中某处显示此值,但我发现很难找到它在哪里。
任何帮助都会很有用
【问题讨论】:
-
...使用开关盒?喜欢:
switch(Build.VERSION.SDK_INT){case 1:return "First Android Version ever!";break;} -
在什么数据集上?我正在寻找包含人类可读值的数据集,这些值应该在设备上的某处可用。
-
我认为任何地方都没有这样的表(除了返回“JELLY_BEAN_MR1”的表)。因此,您会得到
MR1等。顺便说一句,您可以简单地将"_"替换为" "并将"MR"替换为"Maintenance Release "。所以,你会得到"JELLY BEAN Maintenance Release 1"。更好的是,如果你正确的字符串(每个单词的第一个字符大写,其余小写),那么最终得到"Jelly Bean Maintenance Release 1"。我想不出比这更简单更好的了。 -
是的,这一直是我的后备立场(我现在将作为答案发布)但我不想求助于依赖于谷歌保持其命名约定的字符串操作(这,当然,在这个阶段很有可能)
标签: android internationalization