我正在开发一个Android项目,在我的代码中,我需要获取设备序列号。
为了获得它,我过去常常使用自Android O 以来已弃用的Build.SERIAL
。为了避免问题,我开始使用Build.getSerial()
,并创建了一个包含操作系统版本检查的小方法:
private static String getSerial() throws SecurityException {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) {
return Build.SERIAL;
}
return Build.getSerial();
}
注意:我没有检查权限READ_PHONE_STATE
(getSerial()
方法所需)是否被授予,因为我在开始时这样做并确保我已经拥有它在开始使用此方法之前。
问题在于,无论我如何记下Android操作系统检查,我都会不断收到已弃用的API警告。
我尝试了以下操作,对于所有可能的版本,我不断收到Build.SERIAL
private static String getSerial() throws SecurityException {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
return Build.getSerial();
}
return Build.SERIAL;
}
private static String getDeviceUDI() throws SecurityException {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
return Build.getSerial();
} else {
return Build.SERIAL;
}
}
private static String getDeviceUDI() throws SecurityException {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) {
return Build.SERIAL;
} else {
return Build.getSerial();
}
}
答案 0 :(得分:1)
这很烦人,但我发现只有这样才能起作用:
@TargetApi(BUILD.VERSION_CODES.N)
private static String getDeprecatedSerial() {
return BUILD.SERIAL;
}
private static String getSerial() throws SecurityException {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) {
return getDeprecatedSerial();
}
return Build.getSerial();
}
这样,您不会收到有关此API的API级别的弃用警告,也不会抑制所有弃用警告。
答案 1 :(得分:0)
你需要这样的东西:
@SuppressLint("HardwareIds")
@SuppressWarnings("deprecation")
private static String getSerial() throws SecurityException {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) {
return Build.SERIAL;
}
return Build.getSerial();
}
隐藏所有不正确的警告