如何获得人类可读的Android操作系统版本
使用以下工具获取当前设备API级别非常简单和直接:如何获得人类可读的Android操作系统版本,android,internationalization,Android,Internationalization,使用以下工具获取当前设备API级别非常简单和直接: Build.VERSION.SDK_INT 使用它也很容易获得Build.version\u code public static String getDisplayOS() { Field[] fields = Build.VERSION_CODES.class.getFields(); for (Field field : fields) { String fieldName = field.getName
Build.VERSION.SDK_INT
使用它也很容易获得Build.version\u code
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
现在,我可以自己手动添加一个OS版本字符串列表——这很好,但一旦我们通过API 22,我就必须更新产品,只需添加一些额外的字符串
我的大脑告诉我,肯定有一个内部字段在操作系统的某个地方显示这个值,但我发现很难找到它在哪里
任何帮助都是有用的这是一个黑客程序,所以我真的不想使用它。不过,它确实设法使用regexing来提取一些相当合理的显示值
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) {
fieldName = fieldName.replaceAll("_", " ");
String firstLetter = fieldName.substring(0, 1);
fieldName = firstLetter.toUpperCase() + fieldName.substring(1).toLowerCase();
Pattern p = Pattern.compile(" [a-z]");
Matcher m = p.matcher(fieldName);
while (m.find()) {
int index = m.start();
fieldName = fieldName.substring(0, index) + fieldName.substring(index, index+2).toUpperCase() + fieldName.substring(index+2);
}
Pattern mrPattern = Pattern.compile(" (Mr\\d)");
Matcher mrMatcher = mrPattern.matcher(fieldName);
if (mrMatcher.find()) {
fieldName = fieldName.replaceAll(" Mr\\d", "");
return new String[] { fieldName, mrMatcher.group(1).toUpperCase() };
}
return new String[] { fieldName, null };
}
}
return new String[] { null, null };
}
... 使用开关盒?比如:
switch(Build.VERSION.SDK_INT){case 1:return“First Android VERSION!”;break;}
在什么数据集上?我正在寻找一个数据集,其中包括人类可读的值,这些值应该在设备上的某个地方可用。我认为在任何地方都没有这样的表(除了返回“JELLY\u BEAN\u MR1”的表)。因此,您会得到MR1
等等。顺便说一句,您可以简单地用“
替换”
,用“维护版本”
替换“MR”
。因此,您将获得“果冻豆维护发行版1”
。更好的是,如果您将字符串的大小写正确(每个单词的第一个字符都是大写的,其余的都是小写的),那么最终将得到“Jelly Bean Maintenance Release 1”
。我想不出比这更简单更好的了。是的,这一直是我的退路(我现在将作为答案发布),但我不想求助于依靠谷歌保持命名约定的字符串操作(当然,这在现阶段很有可能)