The only way I\'ve found of retrieving MCC and MNC is by overriding an activity\'s onConfigurationChanged method, as such:
public void onConfigurationChanged
You do know there are two MCC/MNC's for an active phone? (One is the country code and carrier id for the Sim card, the other is for the network/cell tower in use.)
If the getResources().getConfiguration().mcc
is not empty in airplane mode, it's the Sim
value TelephonyManager.getSimOperator()
, not the tower
value TelephonyManager.getNetworkOperator()
.
I don't know which the OP wants, but Answer 3 will give him different results than his original code if the getConfiguration
is really the Sim
values.
Okay, it turns out that the getResources().getConfiguration().mcc trick is likely better for most purposes, because with the other one if the person puts their phone in airplane mode or otherwise uses Wi-Fi, then it returns an empty MCC.
this is updated. use this
TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = tel.getSimOperator();
System.out.println("************mnc,mcc"+networkOperator);
if (!TextUtils.isEmpty(networkOperator)) {
mcc = networkOperator.substring(0, 3);
mnc = networkOperator.substring(3);System.out.println("************mnc,mcc"+mnc+mcc);
}mnc_mcc.setText("************mnc,mcc"+mnc+","+mcc);
}
You can access the current configuration by getResources().getConfiguration()
does the trick.
getResources().getConfiguration().mcc
is a bad choice because it returns an integer, hence compromising valid values such as 01
, or 044
. Clearly integer is not a good option for this.
See details in Mobile_Network_Code
Update: in Australia, we verified a wrong case here. The getNetworkOperator
returns different value from getSimOperator
, where the latter is correct.
See details in Android doc: TelephonyManager
The TelephonyManager has a method to return the MCC+MNC as a String (getNetworkOperator()) which will do you what you want. You can get access it via:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = tel.getNetworkOperator();
if (!TextUtils.isEmpty(networkOperator)) {
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
int mnc = Integer.parseInt(networkOperator.substring(3));
}
}