在Android中将电话号码格式化为E164格式

时间:2015-05-14 06:44:19

标签: android number-formatting phonenumberutils

我希望将每个电话号码从设备转换为E164格式。 所以,我在下面使用了opensource。

libphonenumber

所以我就像这里一样使用它。

Phonenumber.PhoneNumber formattedNumber = null;
String formatted = null;

try {
    formattedNumber = phoneUtil.parse(phoneNumber, "KR");
    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;
}

我读到这个库自4.0以来一直被Android框架使用。

  

Java版本针对在智能手机上运行进行了优化,自4.0版以来一直被Android框架使用(Ice Cream Sandwich)。

我想在Android SDK中使用它。所以我找到了这个。 Android SDK提供此PhoneNumberUtils

还有一个功能

  

formatNumberToE164(String phoneNumber,String defaultCountryIso)

它非常易于使用。但此函数的API级别为21。

所以我的问题是..如何在API Level 14(ICS)~21下使用PhoneNumberUtils将电话号码转换为E164?

感谢!

1 个答案:

答案 0 :(得分:7)

问题是PhoneNumberUtils.formatNumberToE164(...)在旧设备上不可用,并且PhoneNumberUtils中没有任何其他功能可以执行相同的工作。

我建议在可用时使用PhoneNumberUtils,在旧设备上使用libphonenumber,例如:

public String formatE164Number(String countryCode, String phNum) {

    String e164Number;
    if (TextUtils.isEmpty(countryCode)) {
        e164Number = phNum;
    } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            e164Number = PhoneNumberUtils.formatNumberToE164(phNum, countryCode);
        } else {
            try {
                PhoneNumberUtil instance = PhoneNumberUtil.getInstance();
                Phonenumber.PhoneNumber phoneNumber = instance.parse(phNum, countryCode);
                e164Number = instance.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164);

            } catch (NumberParseException e) {
                Log.e(TAG, "Caught: " + e.getMessage(), e);
                e164Number = phNum;
            }
        }
    }

    return e164Number;
}