Форматирование номера телефона в формате E164 в Android

Я хочу конвертировать каждый номер телефона из conatct на устройстве в формат 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;
}

И я читал, что эта библиотека используется платформой Android начиная с 4.0.

Версия Java оптимизирована для работы на смартфонах и используется платформой Android начиная с 4.0 (Ice Cream Sandwich).

Я хочу использовать это из Android SDK. Итак, я нашел это. Android SDK предоставляет этот PhoneNumberUtils.

И есть функция

formatNumberToE164(String phoneNumber, String defaultCountryIso)

Это действительно легко использовать. но уровень API этой функции - 21.

Итак, мой вопрос... Как я могу использовать PhoneNumberUtils для преобразования номера телефона в E164 в соответствии с API Level 14(ICS) ~ 21?

Спасибо.!

2 ответа

Решение

Проблема в 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;
}

Я пробовал код выше, он у меня тоже не работает, нужно внести небольшие изменения, делюсь обновленным кодом:

      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);*/
            e164Number =PhoneNumberUtils.formatNumber(phNum, countryCode);
            Timber.d("e164Number E164 :"+ e164Number);
            Toast.makeText(this,"e164 : "+e164Number, Toast.LENGTH_SHORT).show();
        } else {
            try {
                PhoneNumberUtil instance = PhoneNumberUtil.getInstance();
                Phonenumber.PhoneNumber phoneNumber = instance.parse(phNum, countryCode);
                e164Number = instance.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164);
                Timber.d("e164Number E164 : $e164Number");
                Timber.d("e164Number INTERNATIONAL  : "+instance.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL));
                Timber.d("e164Number NATIONAL :  "+instance.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
                Timber.d("e164Number RFC3966 :  "+instance.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.RFC3966));

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

    return e164Number;
}

Теперь вы можете использовать такой метод:

       formatE164Number("US","5712712384");
 (571) 271-2384 


formatE164Number("US","+15712712384");
+1 571-271-2384
Другие вопросы по тегам