您如何在Android中获取手机的MCC和MNC?

我发现检索MCC和MNC的唯一方法是重写一个活动的onConfigurationChanged方法,如下所示:

public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); DeviceData.MCC = "" + config.mcc; DeviceData.MNC = "" +config.mnc; } 

但是,一旦应用程序启动,我就需要这些数据,并且不能等待用户切换手机的方向或等效方式来触发此方法。 有没有更好的方式来访问当前的configuration对象?

TelephonyManager有一个将MCC + MNC作为string( 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)); } } 

你知道有一个活动电话有两个MCC / MNC? (一个是SIM卡的国家代码和运营商ID,另一个是用于networking/蜂窝塔的)。

如果getResources().getConfiguration().mcc在飞行模式下不是空的,则它是SimTelephonyManager.getSimOperator() ,而不是towerTelephonyManager.getNetworkOperator()

我不知道哪个OP是想要的,但是如果getConfiguration真的是Sim值,那么Answer 3会给他不同的结果。

你可以通过getResources().getConfiguration()来访问当前configuration, getResources().getConfiguration()做到这一点。

getResources().getConfiguration().mcc是一个不好的select,因为它返回一个整数,因此会影响有效值,如01044 。 显然整数不是一个好的select。

详见Mobile_Network_Code

更新:在澳大利亚,我们在此validation了一个错误的案例。 getNetworkOperatorgetNetworkOperator返回不同的值,后者是正确的。

在Android文档中查看详细信息: TelephonyManager

我发现networking运营商在没有连接到运营商(服务不可用)的情况下有时可以像65@5那样,即使插入了SIM卡也是如此。 这发生在运行Android 4.1.2的三星S2上。

在这里输入图像说明

所以在转换为Int时必须小心。

  int mcc = Integer.parseInt(networkOperator.substring(0, 3)); 

好的,事实certificategetResources()。getConfiguration()。mcc技巧对于大多数用途来说可能更好,因为如果用户将他们的手机置于飞行模式或者使用Wi-Fi,那么它会返回一个空的MCC。

这是更新。 用这个

  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); }