Reputation: 209
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.
Upvotes: 12
Views: 32887
Reputation: 950
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;
}
Upvotes: 0
Reputation: 715
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
Upvotes: 2
Reputation: 6308
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
Upvotes: 7
Reputation: 1012
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;
}
Upvotes: 23