1

我正在构建一个 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 的客户一起获取此信息?

4

1 回答 1

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。

于 2011-10-17T20:53:41.460 回答