2011-09-22 8 views
7

Sono molto nuovo per lo sviluppo Android. Desidero trovare il numero IMEI del telefono e utilizzare "android.telephony.TelephonyManager;".Utilizzo di Telephony Manager in Android per trovare il numero IMEI

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
telephonyManager.getDeviceId(); 

Ora dice il compilatore. Il contesto non può essere risolto in una variabile. Qualcuno può aiutarmi? Che passo mi manca Ho anche incluso il permesso dell'utente in XML.

risposta

14

Verificare le importazioni, si dovrebbe importare: android.content.Context,

E poi di questo codice:

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
// get IMEI 
String imei = tm.getDeviceId(); 
//get The Phone Number 
String phone = tm.getLine1Number(); 

O direttamente: utilizzare questo:

TelephonyManager tm = (TelephonyManager) getSystemService(android.content.Context.TELEPHONY_SERVICE); 

EDIT: * dovresti passare il contesto alla tua nuova classe sul costruttore: *

public class YourClass { 
    private Context context; 

    //the constructor 
    public YourClass(Context _context){ 

     this.context = _context; 
     //other initialisations ..... 

    } 

    //here is your method to get the IMEI Number by using the Context that you passed to your class 
    public String getIMEINumber(){ 
     //...... place your code here 
    } 

} 

E nella vostra attività, instanciate la classe e passare il contesto in questo modo:

YourClass instance = new YourClass(this); 
String IMEI = instance.getIMEINumber(); 
+0

è lo stesso come la sua domanda .. –

+0

veder la mia Modifica ... – Houcine

+0

suo okey ora, ma la prossima volta prima di leggere con attenzione domanda dopo poi dare risposta in modo corretto –

1

Per errore del compilatore "Contesto non può essere risolto a una variabile", assicurarsi di aver importato android.content.Context pacchetto.
In Eclipse, le correzioni rapide lo avrebbero quando si sposta il puntatore del mouse sulla riga di errore nel codice.
E assicurati di aver aggiunto il permessoFile più indicativo.

2

sufficiente rimuovere Context parola chiave in Context.TELEPHONY_SERVICE e controllare

TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 

String IMEI = tManager.getDeviceId(); 
8

Aggiungi in questo codice:

TelephonyManager manager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
String deviceid=manager.getDeviceId(); 

//Device Id is IMEI number 

    Log.d("msg", "Device id"+deviceid); 

manifesto

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
0

[Nel caso in cui se qualcuno inciampa ancora qui in cerca di questa soluzione secolare ancora esistente]

AFAIK, TelephonyManager.getLine1Number() non è affidabile a causa di vari vincoli da parte degli operatori. Ci sono alcuni hack basati sulla java reflection ma variano da dispositivo a dispositivo rendendo tali tipi di hack inutili [almeno in termini di modelli supportati]

Ma c'è una logica legittima legittima per trovare il numero, se proprio serve così. Interrogare tutti gli SMS dal fornitore di sms e ottenere il numero "A".

Ulteriori vantaggi di questo trucco: 1. è possibile ottenere tutti i numeri di linea se nel dispositivo sono presenti più sim.

Contro: 1. Avrete bisogno dell'autorizzazione SMS_READ [mi dispiace per questo] 2. Otterrete tutti i numeri sim mai usati nel dispositivo. questo problema può essere minimizzato con alcune logiche di vincolo, ad es. periodo di tempo (sms ricevuti o inviati solo oggi), ecc. Sarebbe interessante sentire da altri su come migliorare questo caso.

4

Prova qui sotto il codice che ti aiuterà a ottenere il numero IMEI del dispositivo.

public String getDeviceID() { 
    String deviceId; 
    TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
     if (mTelephony.getDeviceId() != null) { 
      deviceId = mTelephony.getDeviceId(); 
     } else { 
      deviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID); 
     } 
    return deviceId; 
} 

Dare anche l'autorizzazione di lettura stato telefono nel file manifest.

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
Problemi correlati