2009-05-20 4 views
44

L'unico modo che ho trovato di recuperare MCC e MNC è sovrascrivendo il metodo onConfigurationChanged di un'attività, come ad esempio:come si ottiene l'MCC e il MNC del telefono in Android?

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

Tuttavia, ho bisogno di questi dati, non appena inizia l'app e non vedo l'ora per l'utente per cambiare l'orientamento del telefono o equivalente per attivare questo metodo. C'è un modo migliore per accedere all'attuale oggetto Configuration?

risposta

77

Il TelephonyManager ha un metodo per restituire MCC + MNC come stringa (getNetworkOperator()) che farà ciò che si desidera. È possibile ottenere l'accesso tramite:

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

come risolvere il nome dell'operatore – Trikaldarshi

+6

'getNetworkOperator()' restituisce una stringa vuota se non è inserita una scheda SIM. Quindi la condizione 'if' dovrebbe contenere'! NetworkOperator.isEmpty() '.L'ho provato sul mio Nexus 5 –

+1

Inoltre, fallirà nel caso di MVNO –

4

È possibile accedere alla configurazione corrente getResources().getConfiguration() fa il trucco.

1

Ok, si scopre che getResources(). GetConfiguration(). Il trucco mcc è probabilmente migliore per la maggior parte degli scopi, perché con l'altro se la persona mette il proprio telefono in modalità aereo o altrimenti usa il Wi-Fi, quindi restituisce un MCC vuoto.

16

Sai che ci sono due MCC/MNC per un telefono attivo? (Uno è il codice del paese e il supporto id per la scheda Sim, l'altro è per la torre di rete/cellulare in uso.)

Se il getResources().getConfiguration().mcc non è vuoto in modalità aereo, è il valore SimTelephonyManager.getSimOperator(), non il tower valore TelephonyManager.getNetworkOperator().

Non so quale OP desideri, ma la risposta 3 gli darà risultati diversi rispetto al suo codice originale se lo getConfiguration è davvero il valore Sim.

+0

Qual è la differenza tra getNetworkOperator() e getSimOperator(); – rup35h

4

getResources().getConfiguration().mcc è una scelta errata perché restituisce un numero intero, quindi compromette valori validi come 01 o 044. Ovviamente l'intero non è una buona opzione per questo.

Vedere i dettagli in Mobile_Network_Code

Update: in Australia, abbiamo verificato un caso sbagliato qui. Il getNetworkOperator restituisce un valore diverso da getSimOperator, dove quest'ultimo è corretto.

Vedere i dettagli nel documento Android: TelephonyManager

2

ho scoperto che operatore di rete a volte può essere come [email protected] quando non sono collegati al gestore (servizio non disponibile), anche se c'è una scheda inserita una SIM. Questo è successo su Samsung S2 con Android 4.1.2.

enter image description here

quindi bisogna stare attenti durante la conversione in Int.

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

aggiornato. utilizzare questo

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); 
} 
Problemi correlati