как вы получаете телефон MCC и MNC в Android? - PullRequest
48 голосов
/ 21 мая 2009

Единственный способ получения MCC и MNC, который я нашел, - это переопределение метода onConfigurationChanged действия, как такового:

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

Однако мне нужны эти данные, как только приложение запустится, и я не могу дождаться, когда пользователь переключит ориентацию телефона или эквивалентную для запуска этого метода. Есть ли лучший способ получить доступ к текущему объекту конфигурации?

Ответы [ 7 ]

87 голосов
/ 21 мая 2009

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));
    }
}
18 голосов
/ 05 октября 2010

Вы знаете, что есть два MCC / MNC для активного телефона? (Один - это код страны и идентификатор оператора для SIM-карты, другой - для используемой сети / сотовой вышки.)

Если getResources().getConfiguration().mcc не пусто в режиме полета, это значение Sim TelephonyManager.getSimOperator(), а не значение tower TelephonyManager.getNetworkOperator().

Я не знаю, какой ОП хочет, но Ответ 3 даст ему результаты, отличные от его исходного кода, если getConfiguration действительно значение Sim.

4 голосов
/ 16 ноября 2011

getResources().getConfiguration().mcc - неправильный выбор, поскольку он возвращает целое число, следовательно, ставит под угрозу допустимые значения, такие как 01 или 044. Очевидно, что целое число не является хорошим вариантом для этого.

Подробнее см. В Mobile_Network_Code

Обновление: в Австралии мы проверили не тот случай. getNetworkOperator возвращает значение, отличное от getSimOperator, где последнее является правильным.

Подробнее см. В документе Android: TelephonyManager

4 голосов
/ 12 октября 2009

Вы можете получить доступ к текущей конфигурации, набрав getResources().getConfiguration().

2 голосов
/ 30 декабря 2014

Я обнаружил, что сетевой оператор иногда может быть похож на 65@5, когда не подключен к оператору (услуга недоступна), даже если вставлена ​​SIM-карта. Это произошло на Samsung S2 под управлением Android 4.1.2.

enter image description here

Так что вы должны быть осторожны при конвертации в Int.

 int mcc = Integer.parseInt(networkOperator.substring(0, 3));
1 голос
/ 22 сентября 2010

Хорошо, оказывается, что трюк getResources (). GetConfiguration (). Mcc, вероятно, лучше для большинства целей, потому что с другим, если человек переводит свой телефон в режим полета или иным образом использует Wi-Fi, то он возвращает пустой MCC.

0 голосов
/ 07 марта 2017

это обновлено. используйте это

 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...