我正在尝试将任何电话号码(本地或国际电话)格式化为标准的E164格式,但是PhoneNumberUtils中的方法是API级21和更高版本中添加最多的方法,其他方法没有持久性格式,无法确保nbumbers的标准方式。显示,有没有办法实现这一点,而无需使用任何库?

最佳答案

您可以使用Google的开源库libphonenumber转换您的电话号码。实际上,PhoneNumberUtils使用相同的库。

但是,该库将需要ISO 3166-1两个字母的国家/地区代码,并且您可以将网络语言用于默认国家/地区代码,可通过getNetworkCountryIso使用。
您可以使用以下代码:

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber formattedNumber = null;
String formatted = null;

try {
    TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    String countryCode = manager.getNetworkCountryIso();
    formattedNumber = phoneUtil.parse(phoneNumber, countryCode);
    formatted = phoneUtil.format(formattedNumber,PhoneNumberUtil.PhoneNumberFormat.E164);

if (StringUtils.isEmpty(formatted) == false && formatted.length() > 0 && StringUtils.isEmpty(name) == false && name.length() > 0) {
        listName.add(name);
        listPhoneNumber.add(formatted);
    }
} catch (NumberParseException e) {
    continue;
}

10-08 03:38