Как вы получаете телефон MCC и MNC в Android?
Единственный способ, с помощью которого я могу найти MCC и MNC, - это переопределить действие onConfigurationChanged, как таковое:
public void onConfigurationChanged(Configuration config)
{
super.onConfigurationChanged(config);
DeviceData.MCC = "" + config.mcc;
DeviceData.MNC = "" +config.mnc;
}
Тем не менее, мне нужны эти данные, как только приложение запускается и не может дождаться, когда пользователь переключит ориентацию телефона или эквивалент, чтобы вызвать этот метод. Есть ли лучший способ доступа к текущему объекту конфигурации?
Ответы
Ответ 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);
}