即使正确检查,我也会不断弃用API警告

时间:2018-06-04 07:13:09

标签: android android-studio deprecated

我正在开发一个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_STATEgetSerial()方法所需)是否被授予,因为我在开始时这样做并确保我已经拥有它开始使用此方法之前。

问题在于,无论我如何记下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();
    }
}

2 个答案:

答案 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();
}

隐藏所有不正确的警告