2015-05-14 21 views
7

Tôi muốn chuyển đổi mọi số điện thoại từ định dạng conatct sang định dạng E164. Vì vậy, tôi đã sử dụng mã nguồn mở bên dưới.Định dạng số điện thoại ở định dạng E164 trong Android

libphonenumber

Vì vậy, tôi đã sử dụng nó như ở đây.

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; 
} 

Và tôi đọc thư viện này được khung Android sử dụng từ 4.0.

Phiên bản Java được tối ưu hóa để chạy trên điện thoại thông minh và được sử dụng bởi khung công tác Android kể từ 4.0 (Ice Cream Sandwich).

Tôi muốn sử dụng tính năng này từ SDK Android. Vì vậy, tôi tìm thấy điều này. Android SDK cung cấp PhoneNumberUtils này.

Và có một chức năng

formatNumberToE164 (String PhoneNumber, String defaultCountryIso)

Nó thực sự dễ dàng để sử dụng. nhưng cấp API của chức năng này là 21.

Vì vậy, Câu hỏi của tôi là .. Làm cách nào để sử dụng PhoneNumberUtils để chuyển đổi số điện thoại thành E164 trong API cấp 14 (ICS) ~ 21?

Cảm ơn.!

Trả lời

6

Sự cố là PhoneNumberUtils.formatNumberToE164(...) không khả dụng trên các thiết bị cũ hơn và không có gì khác trong PhoneNumberUtils hoạt động tương tự.

tôi muốn đề nghị sử dụng PhoneNumberUtils when available và libphonenumber trên các thiết bị cũ, ví dụ:

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; 
} 
Các vấn đề liên quan