你如何在Android中获得手机的MCC和MNC?

时间:2009-05-20 21:31:01

标签: java android mobile

我发现检索MCC和MNC的唯一方法是覆盖活动的onConfigurationChanged方法,如下:

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

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

7 个答案:

答案 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在飞行模式下不为空,则为SimTelephonyManager.getSimOperator(),而不是towerTelephonyManager.getNetworkOperator()

我不知道OP想要哪个,但如果getConfiguration真的是Sim值,则答案3会给他与原始代码不同的结果。

答案 2 :(得分:4)

您可以通过getResources().getConfiguration()访问当前配置。

答案 3 :(得分:4)

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

请参阅Mobile_Network_Code

中的详细信息

更新:在澳大利亚,我们在这里验证了一个错误的案例。 getNetworkOperator返回getSimOperator的不同值,后者是正确的。

请参阅Android doc中的详细信息:TelephonyManager

答案 4 :(得分:2)

我发现,即使插入了SIM卡,网络运营商有时也可能像65@5未连接到运营商(服务不可用)。这发生在运行Android 4.1.2的三星S2上。

enter image description here

所以转换为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);
}