La seule façon que j'ai trouvée de récupérer MCC et MNC est de redéfinir la méthode onConfigurationChanged d'une activité, en tant que telle:
public void onConfigurationChanged(Configuration config)
{
super.onConfigurationChanged(config);
DeviceData.MCC = "" + config.mcc;
DeviceData.MNC = "" +config.mnc;
}
Cependant, j'ai besoin de ces données dès le démarrage de l'application et je ne peux pas attendre que l'utilisateur change l'orientation du téléphone ou l'équivalent pour déclencher cette méthode. Existe-t-il un meilleur moyen d'accéder à l'objet de configuration actuel?
Le TelephonyManager a une méthode pour renvoyer le MCC + MNC en tant que chaîne ( getNetworkOperator () ) qui vous permettra de faire ce que vous voulez. Vous pouvez y accéder 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));
}
}
Vous savez qu'il y a deux MCC/MNC pour un téléphone actif? (L'une correspond au code pays et à l'identifiant de l'opérateur de la carte Sim, l'autre au réseau/tour de téléphonie cellulaire utilisé.)
Si getResources().getConfiguration().mcc
n'est pas vide en mode avion, il s'agit de la Sim
valeur TelephonyManager.getSimOperator()
et non de la tower
valeur TelephonyManager.getNetworkOperator()
.
Je ne sais pas ce que veut le PO, mais la réponse 3 lui donnera des résultats différents de ceux de son code d'origine si la variable getConfiguration
est réellement la valeur Sim
.
Vous pouvez accéder à la configuration actuelle par getResources().getConfiguration()
fait le tour.
getResources().getConfiguration().mcc
est un mauvais choix car il retourne un entier, ce qui compromet des valeurs valides telles que 01
ou 044
. Clairement, un nombre entier n'est pas une bonne option pour cela.
Voir les détails dans Mobile_Network_Code
Mise à jour: en Australie, nous avons vérifié un cas erroné ici. getNetworkOperator
renvoie une valeur différente de getSimOperator
, où cette dernière est correcte.
Voir les détails dans le doc Android: TelephonyManager
J'ai découvert que l'opérateur de réseau peut parfois ressembler à 65@5
lorsqu'il n'est pas connecté à l'opérateur (service indisponible), même si une carte SIM est insérée. Cela s'est produit sur Samsung S2 sous Android 4.1.2.
Il faut donc faire attention lors de la conversion en Int.
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
D'accord, il s'avère que l'astuce getResources (). GetConfiguration (). Mcc est probablement meilleure dans la plupart des cas, car avec l'autre personne si la personne met son téléphone en mode avion ou utilise le Wi-Fi, elle renvoie un message vide. MCC.
Ceci est mis à jour. utilisez ceci
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);
}