在 API 16 上使用 PhoneNumberUtils.formatNumber()

Using PhoneNumberUtils.formatNumber() on API 16

我正在尝试将数字格式化为默认的国家/地区代码,我知道如何操作,但是当我这样做时,出现错误提示这仅适用于 API 21。我的目标是 API 16. 如果我使用旧方法,我会收到一条错误消息,提示该方法已被弃用?如何在 API 16 上使用该方法?

谢谢!

文档:http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html#FORMAT_NANP

您对文档的 link 并未指明您所指的格式方法。我猜已弃用的方法是 formatNumber(String source).

虽然 "deprecated" 的一般定义包括可能在未来某个时间删除的功能,但 Android 的政策是不从 API 中删除项目将破坏现有代码。 AbsoluteLayout 就是一个例子,它在 API 级别 3 中被弃用,但仍然是 API 的一部分。在 Android 中,"deprecated" 表示有另一种更好的方法可以达到相同的结果,强烈建议您改用它(如果可能)。

此处,改进的替代方法仅在 API 级别 21 中可用。为了支持具有较低 API 级别的设备,您可以安全地使用已弃用的方法。它不会很快消失。

另一种选择是检查 source codePhoneNumberUtils,看看您是否可以使用它的片段来创建您自己的 formatNumber() 方法,该方法可以满足您的需求并支持 API 16 -- 可能不值得付出努力。

以下示例使用@qbix 提到的已弃用方法。

一个好的做法是检查 sdk 的级别以使用正确的方法:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    yourTextView.setText(PhoneNumberUtils.formatNumber(yourStringPhone, Locale.getDefault().getCountry()));
} else {
    yourTextView.setText(PhoneNumberUtils.formatNumber(yourStringPhone)); //Deprecated method
}

这适用于所有版本,可能是因为向后兼容支持:

yourTextView.setText(PhoneNumberUtils.formatNumber(yourStringPhone, Locale.getDefault().getCountry()));