我正在构建一个Android库,并有一个方法来获取有关该设备的一些信息。我们的目标是支持2.2及更高版本但是想知道是否有办法收集更高版本中引入的信息(例如2.3中的设备序列)并且将应用程序设置为版本2.2进行编译。
搜索后,我发现人们使用的代码如下:
private static String getHardwareSerial() {
try {
return Build.SERIAL;
} catch (VerifyError e) {
//Android 8 and previous did not have this information
return Build.UNKNOWN;
}
}
但是,如果存在此代码,则在将构建目标设置为8时,使用我们的库的示例应用程序无法构建。任何建议或我们是否必须与客户一起设置其目标为9以获取此信息?
答案 0 :(得分:1)
你可以通过反思来做到这一点:
public static String getHardwareSerial() {
try {
Field serialField = Build.class.getDeclaredField("SERIAL");
return (String)serialField.get(null);
}
catch (NoSuchFieldException nsf) {
}
catch (IllegalAccessException ia) {
}
return Build.UNKNOWN;
}
如果找不到该字段(在早期版本的操作系统上),它将抛出一个将被忽略的异常,然后通过返回Build.UNKNOWN。