即使检查正确,我仍然收到弃用 API 警告

I keep getting deprecated API warning even with correct check

我正在做一个 Android 项目,在我的代码中的某个时刻我需要获取设备序列号。

为了得到它,我曾经使用 Build.SERIAL,它自 Android O 以来已被弃用。为了避免出现问题,我开始使用 Build.getSerial(),并创建了一个小方法来结束 OS 版本检查:

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 OS 检查,我都会收到已弃用的 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();
    }
}

你需要这样的东西:

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

隐藏所有不正确的警告

这很烦人,但我只发现这样的东西可以工作:

@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 并且您不会抑制所有弃用警告。