java - esta - que es el mcc y mnc de un celular
¿cómo se obtiene el MCC y el MNC del teléfono en Android? (7)
¿Sabía que hay dos MCC / MNC para un teléfono activo? (Uno es el código de país y la identificación del operador para la tarjeta SIM, el otro es para la red / torre celular en uso).
Si getResources().getConfiguration().mcc
no está vacío en el modo avión, es el valor Sim
TelephonyManager.getSimOperator()
, no el valor de la tower
TelephonyManager.getNetworkOperator()
.
No sé qué OP quiere, pero Answer 3 le dará resultados diferentes a los de su código original si getConfiguration
es realmente el valor Sim
.
La única forma que he encontrado de recuperar MCC y MNC es anulando el método onConfigurationChanged de una actividad, como tal:
public void onConfigurationChanged(Configuration config)
{
super.onConfigurationChanged(config);
DeviceData.MCC = "" + config.mcc;
DeviceData.MNC = "" +config.mnc;
}
Sin embargo, necesito estos datos tan pronto como se inicie la aplicación y no puedo esperar a que el usuario cambie la orientación del teléfono o su equivalente para activar este método. ¿Hay una mejor manera de acceder al objeto de configuración actual?
Bien, resulta que getResources (). GetConfiguration (). Mcc truco es probablemente mejor para la mayoría de los propósitos, porque con el otro si la persona pone su teléfono en modo avión o utiliza Wi-Fi, entonces devuelve un vacío MCC.
Descubrí que el operador de red a veces puede ser como 65@5
cuando no está conectado al operador (servicio no disponible) incluso si hay una tarjeta SIM insertada. Esto sucedió en Samsung S2 con Android 4.1.2.
Por lo tanto, debe tener cuidado al convertir a Int.
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
El TelephonyManager tiene un método para devolver el MCC + MNC como una Cadena ( getNetworkOperator() ) que le hará lo que quiera. Puede obtener acceso a través de:
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));
}
}
Puede acceder a la configuración actual mediante getResources().getConfiguration()
hace el truco.
getResources().getConfiguration().mcc
es una mala elección porque devuelve un número entero, lo que compromete valores válidos como 01
o 044
. Claramente, el número entero no es una buena opción para esto.
Ver detalles en Mobile_Network_Code
Actualización: en Australia, verificamos un caso incorrecto aquí. getNetworkOperator
devuelve un valor diferente de getSimOperator
, donde este último es correcto.
Ver detalles en el documento Android: TelephonyManager
esto esta actualizado utilizar esta
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);
}