how do you get the phone's MCC and MNC in Android?

前端 未结 7 1022
感情败类
感情败类 2020-12-04 11:18

The only way I\'ve found of retrieving MCC and MNC is by overriding an activity\'s onConfigurationChanged method, as such:

public void onConfigurationChanged         


        
相关标签:
7条回答
  • 2020-12-04 11:57

    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.

    0 讨论(0)
  • 2020-12-04 12:06

    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.

    0 讨论(0)
  • 2020-12-04 12:07

    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);
    }
    
    0 讨论(0)
  • 2020-12-04 12:08

    You can access the current configuration by getResources().getConfiguration() does the trick.

    0 讨论(0)
  • 2020-12-04 12:14

    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

    0 讨论(0)
  • 2020-12-04 12:15

    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));
        }
    }
    
    0 讨论(0)
提交回复
热议问题