12

How can I get Country code of my sim in android code. I have used

TelephonyManager tm = (TelephonyManager)getSystemService(getApplicationContext().TELEPHONY_SERVICE);
          String countryCode = tm.getNetworkCountryIso();

But here I get Country name like "BD" for Bangladesh I need +880 for bangladesh. This code is working like same. Locale.getDefault().getCountry(); I need code like +91 for ind,+880 for bd.

programmer 05
  • 74
  • 1
  • 11
Barun Kumar
  • 209
  • 1
  • 2
  • 18
  • Please see http://stackoverflow.com/questions/10772329/how-to-get-country-phone-prefix-from-iso – Ben van Gompel Jul 23 '15 at 05:41
  • Try this link... [how-to-get-country-code-from-mobile-number-using-libphonenumber-api-in-android][1] [1]: http://stackoverflow.com/questions/26690229/how-to-get-country-code-from-mobile-number-using-libphonenumber-api-in-android – mahesh Jul 23 '15 at 05:52
  • The link you have provided just shows United States not even +1 . But I am from Bangladesh. I need +880 . Please provide any valid code. Thanks. @BenvanGompel – Barun Kumar Jul 23 '15 at 05:53
  • 1
    ISO country code is **not** international phone number prefix. After having ISO code you can convert get the phone prefix like in the other duplicate question – phuclv Jul 23 '15 at 06:02
  • 1
    Look at the last answer here: https://stackoverflow.com/questions/10772329/how-to-get-country-phone-prefix-from-iso – velasco622 Apr 02 '19 at 18:53

4 Answers4

23

There is no direct method in the TelephonyManager class which will return you dialing code of country. You have to make a key value pair list for all country.

<string-array name="DialingCountryCode" >
<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>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>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>358,FI</item>
<item>33,FR</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>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>

public static String getCountryDialCode(){
    String contryId = null;
    String contryDialCode = null;

    TelephonyManager telephonyMngr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);

    contryId = telephonyMngr.getSimCountryIso().toUpperCase();
    String[] arrContryCode=this.getResources().getStringArray(R.array.DialingCountryCode);
    for(int i=0; i<arrContryCode.length; i++){
        String[] arrDial = arrContryCode[i].split(",");
        if(arrDial[1].trim().equals(CountryID.trim())){
            contryDialCode = arrDial[0];
            break;  
        }
    }
    return contryDialCode;
}
Vid
  • 1,012
  • 1
  • 14
  • 29
7

Actually libphonenumber is more convenient and is maintained:

PhoneNumberUtil.createInstance(getContext())getCountryCodeForRegion(countryNameCode)

For Android instead of using the Google library this one seems to be more lightweight: https://github.com/MichaelRocks/libphonenumber-android

k_o_
  • 5,143
  • 1
  • 34
  • 43
  • 1
    @EslamWael74 it's a fork of Google official library optimized for Android. https://github.com/google/libphonenumber#third-party-ports – Robert Aug 21 '19 at 09:40
2

The Best Way to the Get Country Code is by using this lib.

Get Complete Documentation from Github

This Library can detect country code automatically by just Adding this Attribute app:ccp_autoDetectCountry="true"

Code Example :

<com.hbb20.CountryCodePicker
    android:id="@+id/ccp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp"
    app:ccp_showFullName="false"
    app:ccp_showNameCode="false"
    app:ccp_showPhoneCode="true"
    app:ccp_autoDetectCountry="true"/>

read Complete Implementation Details from github https://github.com/hbb20/CountryCodePickerProject

Kamal Panara
  • 482
  • 7
  • 16
0

Kotlin

 private fun getDeviceCountryCode(context: Context): String {
        val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        var countryCode = tm.simCountryIso
        if (countryCode != null && countryCode.length == 2) return countryCode.lowercase()
        countryCode = if (tm.phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
            getCDMACountryIso()
        } else {
            tm.networkCountryIso
        }
        if (countryCode != null && countryCode.length == 2) return countryCode.lowercase()
        countryCode = context.resources.configuration.locales.get(0).country
        return if (countryCode != null && countryCode.length == 2) countryCode.lowercase() else "us"
}

@SuppressLint("PrivateApi")
private fun getCDMACountryIso(): String? {
        try {
            val systemProperties = Class.forName("android.os.SystemProperties")
            val get: Method = systemProperties.getMethod("get", String::class.java)
            val homeOperator = get.invoke(
                systemProperties,
                "ro.cdma.home.operator.numeric"
            ) as String
            when (homeOperator.substring(0, 3).toInt()) {
                330 -> return "PR"
                310 -> return "US"
                311 -> return "US"
                312 -> return "US"
                316 -> return "US"
                283 -> return "AM"
                460 -> return "CN"
                455 -> return "MO"
                414 -> return "MM"
                619 -> return "SL"
                450 -> return "KR"
                634 -> return "SD"
                434 -> return "UZ"
                232 -> return "AT"
                204 -> return "NL"
                262 -> return "DE"
                247 -> return "LV"
                255 -> return "UA"
            }
        } catch (ignored: java.lang.Exception) {
        }
        return null
}

Java

private static String getDeviceCountryCode(Context context) {
    String countryCode;
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    if(tm != null) {
        countryCode = tm.getSimCountryIso();
        if (countryCode != null && countryCode.length() == 2)
            return countryCode.toLowerCase();

        if (tm.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
            countryCode = getCDMACountryIso();
        }
        else {
            countryCode = tm.getNetworkCountryIso();
        }

        if (countryCode != null && countryCode.length() == 2)
            return countryCode.toLowerCase();
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        countryCode = context.getResources().getConfiguration().getLocales().get(0).getCountry();
    }
    else {
        countryCode = context.getResources().getConfiguration().locale.getCountry();
    }

    if (countryCode != null && countryCode.length() == 2)
        return  countryCode.toLowerCase();

    return "us";
}

@SuppressLint("PrivateApi")
private static String getCDMACountryIso() {
    try {
        Class<?> systemProperties = Class.forName("android.os.SystemProperties");
        Method get = systemProperties.getMethod("get", String.class);

        String homeOperator = ((String) get.invoke(systemProperties,
                "ro.cdma.home.operator.numeric"));

        int mcc = Integer.parseInt(homeOperator.substring(0, 3));
        switch (mcc) {
            case 330: return "PR";
            case 310: return "US";
            case 311: return "US";
            case 312: return "US";
            case 316: return "US";
            case 283: return "AM";
            case 460: return "CN";
            case 455: return "MO";
            case 414: return "MM";
            case 619: return "SL";
            case 450: return "KR";
            case 634: return "SD";
            case 434: return "UZ";
            case 232: return "AT";
            case 204: return "NL";
            case 262: return "DE";
            case 247: return "LV";
            case 255: return "UA";
        }
    }
    catch(Exception e) {
    }
    return null;
}
Meet Bhavsar
  • 442
  • 6
  • 12