How to format a phone number using PhoneNumberUtils?

前端 未结 8 1884
慢半拍i
慢半拍i 2020-12-07 22:05

How can I format a phone number using PhoneNumberUtils?

E.g.: 1234567890(123) 456-7890

相关标签:
8条回答
  • 2020-12-07 22:45

    We can easily do this by:

    val tm = act.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager?
    val formattedPhoneNumber= PhoneNumberUtils.formatNumber(phone, tm?.simCountryIso?.toUpperCase())
    

    here, tm?.simCountryIso?.toUpperCase() returns iso code, "in" in my case and we used toUpperCase() to convert it into "IN"

    you can also use networkCountryIso instead of simCountryIso.

    From doc:

    getNetworkCountryIso(): Returns the ISO-3166-1 alpha-2 country code equivalent of the MCC (Mobile Country Code) of the current registered operator or the cell nearby, if available.

    getSimCountryIso(): Returns the ISO-3166-1 alpha-2 country code equivalent for the SIM provider's country code.

    you can also pass direct iso code, for example:

    PhoneNumberUtils.formatNumber("2025550739", "US") // output: (202) 555-0739
    

    Check the list of iso codes.

    0 讨论(0)
  • 2020-12-07 22:47

    formatNumber got deprecated on LOLLIPOP, after that you need to add the locale as an extra argument.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      return PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry());
    } else {
    //Deprecated method
      return PhoneNumberUtils.formatNumber(yourStringPhone); 
    }
    
    0 讨论(0)
  • 2020-12-07 22:50

    It looks like this library from Google might be a better solution for doing customized formatting in Android.

    API docs: https://github.com/googlei18n/libphonenumber/blob/master/README.md

    0 讨论(0)
  • 2020-12-07 22:53

    At its most basic:

    String formattedNumber = PhoneNumberUtils.formatNumber(unformattedNumber);
    

    This will automatically format the number according to the rules for the country the number is from.

    You can also format Editable text in-place using:

    PhoneNumberUtils.formatNumber(Editable text, int defaultFormattingType);
    

    Take a look at PhoneNumberUtils for more options.

    0 讨论(0)
  • 2020-12-07 22:54

    2020- November

    Following worked for me for all version of OS:

    PhoneNumberUtils.formatNumber(yourStringPhone,Locale.getDefault().getCountry());
    
    0 讨论(0)
  • 2020-12-07 22:56

    I opted to use google's version (https://github.com/googlei18n/libphonenumber) because then the min SDK can be lower (I think it isn't in Android SDK until 21).

    Use is something like this:

    PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
    Phonenumber.PhoneNumber pn = pnu.parse("1234567890", "US");
    String pnE164 = pnu.format(pn, PhoneNumberUtil.PhoneNumberFormat.E164);
    

    In Android Studio one need add this to dependencies in build.gradle:

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        ...
        compile 'com.googlecode.libphonenumber:libphonenumber:7.2.2'
    }
    
    0 讨论(0)
提交回复
热议问题