Подтвердить что ты не робот

Как вы получаете телефон MCC и MNC в Android?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

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

Подробнее в Android-документе: TelephonyManager

Ответ 5

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

enter image description here

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

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

Ответ 6

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

Ответ 7

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

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