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

我想把设备中的每个电话号码都转换成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版(Ice Cream Sandwich)开始被Android框架使用。

我想从Android SDK使用这个。 所以我find了 Android SDK提供了这个PhoneNumberUtils 。

还有一个function

formatNumberToE164(stringphoneNumber,stringdefaultCountryIso)

这很容易使用。 但是这个函数的API级别是21。

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

谢谢。!

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

    我build议在可用时使用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; }