Getting telephone US local area code with Android

2019-01-01 12:46发布

I would like to know how can i get the device/user area code from within my android app I know there is a lib named TelephonyManager but i couldn't find the country code feature

To make myself clear: I have an activity which asks the user to enter his phone number and i want the area code to be taken from the device (from his carrier?) If i would open my app in new york i would get +212 as the code and a text box to enter my own number

10条回答
余欢
2楼-- · 2019-01-01 13:36

I know it way too late. But I have a batter solution of it. Since doing it with the list of String and looping through it might slow it down. Using Hashmap would be a batter solution for it. I wrote a PhoneUtil class for it. Here is code ( i only have 20 or so countries but you can add more to it )

import android.content.Context;
import android.telephony.TelephonyManager;

import java.util.HashMap;

/**
 * Created by Dell on 1/19/2017.
 */

public class PhoneUtil {
    public static String getCountryCode(Context context) {
        TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if (manager != null) {
            return getCountryCodeFromMap(manager.getSimCountryIso().toUpperCase());
        } else {
            return null;

        }

    }

    private static String getCountryCodeFromMap(String countryCode) {
        HashMap<String, String> countryCodeMap = new HashMap<>();

          countryCodeMap.put("TJ", "+992");
    countryCodeMap.put("TZ", "+255");
    countryCodeMap.put("TH", "+66");
    countryCodeMap.put("TG", "+228");
    countryCodeMap.put("TK", "+690");
    countryCodeMap.put("TO", "+676");
    countryCodeMap.put("TN", "+216");
    countryCodeMap.put("TR", "+90");
    countryCodeMap.put("TM", "+993");
    countryCodeMap.put("TV", "+688");
    countryCodeMap.put("AE", "+971");
    countryCodeMap.put("UG", "+256");
    countryCodeMap.put("GB", "+44");
    countryCodeMap.put("UA", "+380");
    countryCodeMap.put("UY", "+598");
    countryCodeMap.put("US", "+1");
    countryCodeMap.put("UZ", "+998");
    countryCodeMap.put("VU", "+678");
    countryCodeMap.put("VA", "+39");
    countryCodeMap.put("VE", "+58");
    countryCodeMap.put("VN", "+84");
    countryCodeMap.put("WF", "+681");
    countryCodeMap.put("YE", "+967");
    countryCodeMap.put("ZM", "+260");
    countryCodeMap.put("ZW", "+263");
    countryCodeMap.put( "MY","+60");
    countryCodeMap.put("PK","+92");
        return countryCodeMap.get(countryCode);
    }
}
查看更多
听够珍惜
3楼-- · 2019-01-01 13:37

1- Add This Array to Strings.xml File

<string-array name="CountryCodes" >
<item>93,AF</item>
<item>355,AL</item>
<item>213,DZ</item>
<item>376,AD</item>
<item>244,AO</item>
<item>672,AQ</item>
<item>54,AR</item>
<item>374,AM</item>
<item>297,AW</item>
<item>61,AU</item>
<item>43,AT</item>
<item>994,AZ</item>
<item>973,BH</item>
<item>880,BD</item>
<item>375,BY</item>
<item>32,BE</item>
<item>501,BZ</item>
<item>229,BJ</item>
<item>975,BT</item>
<item>591,BO</item>
<item>387,BA</item>
<item>267,BW</item>
<item>55,BR</item>
<item>673,BN</item>
<item>359,BG</item>
<item>226,BF</item>
<item>95,MM</item>
<item>257,BI</item>
<item>855,KH</item>
<item>237,CM</item>
<item>1,CA</item>
<item>238,CV</item>
<item>236,CF</item>
<item>235,TD</item>
<item>56,CL</item>
<item>86,CN</item>
<item>61,CX</item>
<item>61,CC</item>
<item>57,CO</item>
<item>269,KM</item>
<item>242,CG</item>
<item>243,CD</item>
<item>682,CK</item>
<item>506,CR</item>
<item>385,HR</item>
<item>53,CU</item>
<item>357,CY</item>
<item>420,CZ</item>
<item>45,DK</item>
<item>253,DJ</item>
<item>670,TL</item>
<item>593,EC</item>
<item>20,EG</item>
<item>503,SV</item>
<item>240,GQ</item>
<item>291,ER</item>
<item>372,EE</item>
<item>251,ET</item>
<item>500,FK</item>
<item>298,FO</item>
<item>679,FJ</item>
<item>358,FI</item>
<item>33,FR</item>
<item>689,PF</item>
<item>241,GA</item>
<item>220,GM</item>
<item>995,GE</item>
<item>49,DE</item>
<item>233,GH</item>
<item>350,GI</item>
<item>30,GR</item>
<item>299,GL</item>
<item>502,GT</item>
<item>224,GN</item>
<item>245,GW</item>
<item>592,GY</item>
<item>509,HT</item>
<item>504,HN</item>
<item>852,HK</item>
<item>36,HU</item>
<item>91,IN</item>
<item>62,ID</item>
<item>98,IR</item>
<item>964,IQ</item>
<item>353,IE</item>
<item>44,IM</item>
<item>972,IL</item>
<item>39,IT</item>
<item>225,CI</item>
<item>81,JP</item>
<item>962,JO</item>
<item>7,KZ</item>
<item>254,KE</item>
<item>686,KI</item>
<item>965,KW</item>
<item>996,KG</item>
<item>856,LA</item>
<item>371,LV</item>
<item>961,LB</item>
<item>266,LS</item>
<item>231,LR</item>
<item>218,LY</item>
<item>423,LI</item>
<item>370,LT</item>
<item>352,LU</item>
<item>853,MO</item>
<item>389,MK</item>
<item>261,MG</item>
<item>265,MW</item>
<item>60,MY</item>
<item>960,MV</item>
<item>223,ML</item>
<item>356,MT</item>
<item>692,MH</item>
<item>222,MR</item>
<item>230,MU</item>
<item>262,YT</item>
<item>52,MX</item>
<item>691,FM</item>
<item>373,MD</item>
<item>377,MC</item>
<item>976,MN</item>
<item>382,ME</item>
<item>212,MA</item>
<item>258,MZ</item>
<item>264,NA</item>
<item>674,NR</item>
<item>977,NP</item>
<item>31,NL</item>
<item>599,AN</item>
<item>687,NC</item>
<item>64,NZ</item>
<item>505,NI</item>
<item>227,NE</item>
<item>234,NG</item>
<item>683,NU</item>
<item>850,KP</item>
<item>47,NO</item>
<item>968,OM</item>
<item>92,PK</item>
<item>680,PW</item>
<item>507,PA</item>
<item>675,PG</item>
<item>595,PY</item>
<item>51,PE</item>
<item>63,PH</item>
<item>870,PN</item>
<item>48,PL</item>
<item>351,PT</item>
<item>1,PR</item>
<item>974,QA</item>
<item>40,RO</item>
<item>7,RU</item>
<item>250,RW</item>
<item>590,BL</item>
<item>685,WS</item>
<item>378,SM</item>
<item>239,ST</item>
<item>966,SA</item>
<item>221,SN</item>
<item>381,RS</item>
<item>248,SC</item>
<item>232,SL</item>
<item>65,SG</item>
<item>421,SK</item>
<item>386,SI</item>
<item>677,SB</item>
<item>252,SO</item>
<item>27,ZA</item>
<item>82,KR</item>
<item>34,ES</item>
<item>94,LK</item>
<item>290,SH</item>
<item>508,PM</item>
<item>249,SD</item>
<item>597,SR</item>
<item>268,SZ</item>
<item>46,SE</item>
<item>41,CH</item>
<item>963,SY</item>
<item>886,TW</item>
<item>992,TJ</item>
<item>255,TZ</item>
<item>66,TH</item>
<item>228,TG</item>
<item>690,TK</item>
<item>676,TO</item>
<item>216,TN</item>
<item>90,TR</item>
<item>993,TM</item>
<item>688,TV</item>
<item>971,AE</item>
<item>256,UG</item>
<item>44,GB</item>
<item>380,UA</item>
<item>598,UY</item>
<item>1,US</item>
<item>998,UZ</item>
<item>678,VU</item>
<item>39,VA</item>
<item>58,VE</item>
<item>84,VN</item>
<item>681,WF</item>
<item>967,YE</item>
<item>260,ZM</item>
<item>263,ZW</item>
</string-array>

2-CopyThis Function To your Class

public String GetCountryZipCode(){
    String CountryID="";
    String CountryZipCode="";

    TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    //getNetworkCountryIso
    CountryID= manager.getSimCountryIso().toUpperCase();
    String[] rl=this.getResources().getStringArray(R.array.CountryCodes);
    for(int i=0;i<rl.length;i++){
        String[] g=rl[i].split(",");
        if(g[1].trim().equals(CountryID.trim())){
            CountryZipCode=g[0];
            break;  
        }
    }
    return CountryZipCode;
}

3-Call Function GetCountryZipCode()

4-write Thank you Wais.

查看更多
无与为乐者.
4楼-- · 2019-01-01 13:40

in this case this would look like:

    /**
     * network iso code: referred and listed at:
     * http://en.wikipedia.org/wiki/List_of_mobile_country_codes
     */
    TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    Constants.DEVICE_COUNTRY = manager.getNetworkCountryIso();

So nobody has to look and double-check (context is a local variable of a valid Context object). Constants.DEVICE_COUNTRY is of Type String :) (just a variable)

查看更多
春风洒进眼中
5楼-- · 2019-01-01 13:41

This is code to put in your Main Activity to replace the code that Wais posted near the top of this page. Take the array that Wais posted and add that to your app in the resources. I might have slightly changed the name of the array to be stored in resources, other than that, this code should work well and be easier to read if you are learning:

public String getCountryCode()
{
    String my_country_code_letters = getMyLocale().getCountry();

    String[] country_codes = this.getResources().getStringArray(R.array.country_codes);

    String my_country_code_number = null;
    //------------------------------------------------------------------------------------------
    for (int i=0; i < country_codes.length && i != (-1); i++)
    {
        /**split_code:
         * 1) split_code[0] == numbers
         * 2) split_code[1] == letters**/
        String[] split_code = country_codes[i].split(",");
        //--------------------------------------------------------------------------------------
        if (split_code[1].matches(my_country_code_letters))
        {
            my_country_code_number = split_code[0];
            break;
        }
        //--------------------------------------------------------------------------------------
    }
    //------------------------------------------------------------------------------------------

    return my_country_code_number;
}

public Locale getMyLocale()
{
    Log.i(TAG, "Running getMyLocale()");

    Locale myLocale = "";
    //------------------------------------------------------------------------------------------
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
    {
        myLocale = getBaseContext().getResources().getConfiguration().getLocales().get(0);
    }
    else
    {
        //noinspection deprecation
        myLocale = getBaseContext().getResources().getConfiguration().locale;
    }
    //------------------------------------------------------------------------------------------

    return myLocale;
}
查看更多
登录 后发表回答