it-swarm.com.de

wie erhalten Sie die MCC und MNC des Telefons in Android?

Die einzige Möglichkeit zum Abrufen von MCC und MNC besteht darin, die onConfigurationChanged-Methode einer Aktivität als solche zu überschreiben:

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

Ich benötige diese Daten jedoch, sobald die App gestartet wird, und kann nicht warten, bis der Benutzer die Ausrichtung des Telefons oder ein gleichwertiges Element ändert, um diese Methode auszulösen. Gibt es eine bessere Möglichkeit, auf das aktuelle Konfigurationsobjekt zuzugreifen?

48
user108078

Der TelephonyManager hat eine Methode, um den MCC + MNC als String ( getNetworkOperator () ) zurückzugeben, was Sie machen wird, was Sie wollen. Sie können darauf zugreifen:

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

Sie wissen, dass es zwei MCC/MNCs für ein aktives Telefon gibt? (Eine ist der Ländercode und die Carrier-ID für die Sim-Karte, die andere für das verwendete Netzwerk/den Funkturm.)

Wenn getResources().getConfiguration().mcc im Flugzeugmodus nicht leer ist, handelt es sich um den Sim-Wert TelephonyManager.getSimOperator(), nicht um den tower-Wert TelephonyManager.getNetworkOperator().

Ich weiß nicht, was das OP will, aber Antwort 3 liefert ihm andere Ergebnisse als sein ursprünglicher Code, wenn die Variable getConfiguration wirklich die Variable Sim ist.

17
danS

Sie können auf die aktuelle Konfiguration zugreifen, indem Sie getResources().getConfiguration() den Trick ausführen.

4
user188128

getResources().getConfiguration().mcc ist eine schlechte Wahl, da sie eine ganze Zahl zurückgibt und daher gültige Werte wie 01 oder 044 gefährdet. Ganzzahl ist eindeutig keine gute Option dafür.

Details finden Sie in Mobile_Network_Code

Update: In Australien haben wir hier einen falschen Fall überprüft. Die Variable getNetworkOperator gibt einen anderen Wert als getSimOperator zurück, wobei letztere richtig ist.

Details finden Sie im Android-Dokument: TelephonyManager

4
bruno.braga

Ich habe herausgefunden, dass der Netzbetreiber manchmal wie [email protected] sein kann, wenn er nicht mit dem Betreiber verbunden ist (Dienst nicht verfügbar), auch wenn eine SIM-Karte eingelegt ist. Dies geschah auf Samsung S2 mit Android 4.1.2. 

enter image description here

Sie müssen also vorsichtig sein, wenn Sie in Int konvertieren.

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

Okay, es stellt sich heraus, dass der getResources (). GetConfiguration () .mcc-Trick wahrscheinlich für die meisten Zwecke besser ist, da bei der anderen Person, wenn die Person ihr Telefon in den Flugzeugmodus versetzt oder anderweitig WLAN verwendet, eine leere Nachricht zurückgegeben wird MCC.

1
Artem

dies wird aktualisiert. benutze das

 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