参考 https://github.com/MichaelRocks/libphonenumber-android.git ,
它是 Google 的 libphonenumber 库的 Android 移植版。
可用于解析、格式化电话号码,并获取国家区号(Country Calling Code)
开始使用。
加入依赖,在 app 的 build.gradle
添加
dependencies {// libphonenumberimplementation 'io.michaelrocks:libphonenumber-android:8.13.35'
}
简单使用示例 ,得到 CN(+86) 、US(+1) 形式的数组
import android.content.Context;
import android.util.Log;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;import io.michaelrocks.libphonenumber.android.PhoneNumberUtil;public class LibPhoneNumberUtil {public static final String TAG = LibPhoneNumberUtil.class.getSimpleName();private final static boolean DEBUG = true;private static final String[] defaultArr = { "US(+1)" };/*** 获取区域和区号 , CN(+86) 形式的数组*/public static String[] getStandardArray(Context context){PhoneNumberUtil util = PhoneNumberUtil.createInstance(context); // 1Set<String> regions = util.getSupportedRegions(); // 2if (DEBUG) Log.d(TAG , "regions : " + regions);if(regions.size() == 0){return defaultArr;}String[] arr = regions.toArray(new String[0]);if (DEBUG) Log.d(TAG , "arr.length : " + arr.length);if (DEBUG) Log.d(TAG , "arr : " + Arrays.deepToString(arr));Arrays.sort(arr);if (DEBUG) Log.d(TAG , "sort arr : " + Arrays.deepToString(arr));List<String> myList = new ArrayList<>();for (String region : arr) {int cCode = util.getCountryCodeForRegion(region); // 3//if (DEBUG) Log.d(TAG, "region : " + region + " , cCode : " + cCode);myList.add(region + "(+" + cCode + ")");}if (myList.size() > 0){String[] arrLi = myList.toArray(new String[0]);if (DEBUG) Log.d(TAG , "arrLi : " + Arrays.deepToString(arrLi));return arrLi;}return defaultArr;}
运行结果
regions : [PR, PS, PT, PW, PY, QA, AC, AD, AE, AF, AG, AI, AL, AM, AO, AR, AS, AT, RE, AU, AW, AX, AZ, RO, BA, BB, RS, BD, RU, BE, BF, RW, BG, BH, BI, BJ, BL, BM, BN, BO, SA, BQ, SB, BR, SC, BS, SD, SE, BT, SG, BW, SH, SI, SJ, BY, SK, BZ, SL, SM, SN, SO, CA, SR, CC, SS, ST, CD, CF, SV, CG, SX, CH, CI, SY, SZ, CK, CL, CM, CN, CO, TA, TC, CR, TD, CU, TG, CV, TH, CW, CX, CY, TJ, TK, CZ, TL, TM, TN, TO, TR, TT, DE, TV, TW, DJ, TZ, DK, DM, DO, UA, UG, DZ, US, EC, EE, EG, EH, UY, UZ, VA, VC, ER, ES, VE, ET, VG, VI, VN, VU, FI, FJ, FK, FM, FO, FR, WF, GA, GB, WS, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GT, GU, GW, GY, XK, HK, HN, HR, YE, HT, HU, ID, YT, IE, IL, IM, IN, IO, ZA, IQ, IR, IS, IT, ZM, JE, ZW, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM]
arr.length : 245
arr : [PR, PS, PT, PW, PY, QA, AC, AD, AE, AF, AG, AI, AL, AM, AO, AR, AS, AT, RE, AU, AW, AX, AZ, RO, BA, BB, RS, BD, RU, BE, BF, RW, BG, BH, BI, BJ, BL, BM, BN, BO, SA, BQ, SB, BR, SC, BS, SD, SE, BT, SG, BW, SH, SI, SJ, BY, SK, BZ, SL, SM, SN, SO, CA, SR, CC, SS, ST, CD, CF, SV, CG, SX, CH, CI, SY, SZ, CK, CL, CM, CN, CO, TA, TC, CR, TD, CU, TG, CV, TH, CW, CX, CY, TJ, TK, CZ, TL, TM, TN, TO, TR, TT, DE, TV, TW, DJ, TZ, DK, DM, DO, UA, UG, DZ, US, EC, EE, EG, EH, UY, UZ, VA, VC, ER, ES, VE, ET, VG, VI, VN, VU, FI, FJ, FK, FM, FO, FR, WF, GA, GB, WS, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GT, GU, GW, GY, XK, HK, HN, HR, YE, HT, HU, ID, YT, IE, IL, IM, IN, IO, ZA, IQ, IR, IS, IT, ZM, JE, ZW, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM]
sort arr : [AC, AD, AE, AF, AG, AI, AL, AM, AO, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GT, GU, GW, GY, HK, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TA, TC, TD, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW]
arrLi : [AC(+247), AD(+376), AE(+971), AF(+93), AG(+1), AI(+1), AL(+355), AM(+374), AO(+244), AR(+54), AS(+1), AT(+43), AU(+61), AW(+297), AX(+358), AZ(+994), BA(+387), BB(+1), BD(+880), BE(+32), BF(+226), BG(+359), BH(+973), BI(+257), BJ(+229), BL(+590), BM(+1), BN(+673), BO(+591), BQ(+599), BR(+55), BS(+1), BT(+975), BW(+267), BY(+375), BZ(+501), CA(+1), CC(+61), CD(+243), CF(+236), CG(+242), CH(+41), CI(+225), CK(+682), CL(+56), CM(+237), CN(+86), CO(+57), CR(+506), CU(+53), CV(+238), CW(+599), CX(+61), CY(+357), CZ(+420), DE(+49), DJ(+253), DK(+45), DM(+1), DO(+1), DZ(+213), EC(+593), EE(+372), EG(+20), EH(+212), ER(+291), ES(+34), ET(+251), FI(+358), FJ(+679), FK(+500), FM(+691), FO(+298), FR(+33), GA(+241), GB(+44), GD(+1), GE(+995), GF(+594), GG(+44), GH(+233), GI(+350), GL(+299), GM(+220), GN(+224), GP(+590), GQ(+240), GR(+30), GT(+502), GU(+1), GW(+245), GY(+592), HK(+852), HN(+504), HR(+385), HT(+509), HU(+36), ID(+62), IE(+353), IL(+972), IM(+44), IN(+91), IO(+246), IQ(+964), IR(+98), IS(+354), IT(+39), JE(+44), JM(+1), JO(+962), JP(+81), KE(+254), KG(+996), KH(+855), KI(+686), KM(+269), KN(+1), KP(+850), KR(+82), KW(+965), KY(+1), KZ(+7), LA(+856), LB(+961), LC(+1), LI(+423), LK(+94), LR(+231), LS(+266), LT(+370), LU(+352), LV(+371), LY(+218), MA(+212), MC(+377), MD(+373), ME(+382), MF(+590), MG(+261), MH(+692), MK(+389), ML(+223), MM(+95), MN(+976), MO(+853), MP(+1), MQ(+596), MR(+222), MS(+1), MT(+356), MU(+230), MV(+960), MW(+265), MX(+52), MY(+60), MZ(+258), NA(+264), NC(+687), NE(+227), NF(+672), NG(+234), NI(+505), NL(+31), NO(+47), NP(+977), NR(+674), NU(+683), NZ(+64), OM(+968), PA(+507), PE(+51), PF(+689), PG(+675), PH(+63), PK(+92), PL(+48), PM(+508), PR(+1), PS(+970), PT(+351), PW(+680), PY(+595), QA(+974), RE(+262), RO(+40), RS(+381), RU(+7), RW(+250), SA(+966), SB(+677), SC(+248), SD(+249), SE(+46), SG(+65), SH(+290), SI(+386), SJ(+47), SK(+421), SL(+232), SM(+378), SN(+221), SO(+252), SR(+597), SS(+211), ST(+239), SV(+503), SX(+1), SY(+963), SZ(+268), TA(+290), TC(+1), TD(+235), TG(+228), TH(+66), TJ(+992), TK(+690), TL(+670), TM(+993), TN(+216), TO(+676), TR(+90), TT(+1), TV(+688), TW(+886), TZ(+255), UA(+380), UG(+256), US(+1), UY(+598), UZ(+998), VA(+39), VC(+1), VE(+58), VG(+1), VI(+1), VN(+84), VU(+678), WF(+681), WS(+685), XK(+383), YE(+967), YT(+262), ZA(+27), ZM(+260), ZW(+263)]
createInstance
- 注释1:
PhoneNumberUtil.createInstance(context)
初始化。
getSupportedRegions
- 注释2 :
getSupportedRegions()
获取支持的国家、地区。
/*** Returns all regions the library has metadata for.** @return an unordered set of the two-letter region codes for every geographical region the* library supports*/public Set<String> getSupportedRegions() {return Collections.unmodifiableSet(supportedRegions);}
getCountryCodeForRegion
- 注释3 :
getCountryCodeForRegion(String regionCode)
,根据国家、地区获取到对应的区号。
/*** Returns the country calling code for a specific region. For example, this would be 1 for the* United States, and 64 for New Zealand.** @param regionCode the region that we want to get the country calling code for* @return the country calling code for the region denoted by regionCode*/public int getCountryCodeForRegion(String regionCode) {if (!isValidRegionCode(regionCode)) {logger.log(Level.WARNING,"Invalid or missing region code ("+ ((regionCode == null) ? "null" : regionCode)+ ") provided.");return 0;}return getCountryCodeForValidRegion(regionCode);}
parse
还可以通过给定的号码获取区号,
try {PhoneNumberUtil util = PhoneNumberUtil.createInstance(context); Phonenumber.PhoneNumber phoneNumber = util.parse("+8610086", null);int code = phoneNumber.getCountryCode();Log.d("luoah" , "[MainActivity] -- testCountryPhoneList -- code : " + code);} catch (NumberParseException e) {throw new RuntimeException(e);}
示例的运行结果是 86