我发现检索MCC和MNC的唯一方法是覆盖活动的onConfigurationChanged方法,如下:
public void onConfigurationChanged(Configuration config)
{
super.onConfigurationChanged(config);
DeviceData.MCC = "" + config.mcc;
DeviceData.MNC = "" +config.mnc;
}
但是,一旦应用程序启动,我就需要这些数据,并且无法等待用户切换手机的方向或等效触发此方法。有没有更好的方法来访问当前的Configuration对象?
答案 0 :(得分:87)
TelephonyManager有一种方法可以将MCC + MNC作为字符串(getNetworkOperator())返回,它可以满足您的需要。您可以通过以下方式访问它:
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));
}
}
答案 1 :(得分:18)
您确实知道有两部MCC / MNC适用于有源手机吗? (一个是Sim卡的国家代码和运营商ID,另一个是正在使用的网络/蜂窝塔。)
如果getResources().getConfiguration().mcc
在飞行模式下不为空,则为Sim
值TelephonyManager.getSimOperator()
,而不是tower
值TelephonyManager.getNetworkOperator()
。
我不知道OP想要哪个,但如果getConfiguration
真的是Sim
值,则答案3会给他与原始代码不同的结果。
答案 2 :(得分:4)
您可以通过getResources().getConfiguration()
访问当前配置。
答案 3 :(得分:4)
getResources().getConfiguration().mcc
是一个糟糕的选择,因为它会返回一个整数,因此会影响有效值,例如01
或044
。显然,整数不是一个好的选择。
更新:在澳大利亚,我们在这里验证了一个错误的案例。 getNetworkOperator
返回getSimOperator
的不同值,后者是正确的。
请参阅Android doc中的详细信息:TelephonyManager
答案 4 :(得分:2)
我发现,即使插入了SIM卡,网络运营商有时也可能像65@5
未连接到运营商(服务不可用)。这发生在运行Android 4.1.2的三星S2上。
所以转换为Int时必须小心。
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
答案 5 :(得分:1)
好的,事实证明getResources()。getConfiguration()。mcc技巧对于大多数用途可能更好,因为如果另一个人将手机置于飞行模式或以其他方式使用Wi-Fi,那么返回一个空的MCC。
答案 6 :(得分:0)
此更新。使用此
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);
}