web-dev-qa-db-fra.com

comment obtenez-vous le MCC et le MNC du téléphone sous Android?

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?

48
user108078

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

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.

17
danS

Vous pouvez accéder à la configuration actuelle par getResources().getConfiguration() fait le tour.

4
user188128

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

4
bruno.braga

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. 

enter image description here

Il faut donc faire attention lors de la conversion en Int.

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

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.

1
Artem

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);
}
0
Akash pasupathi