2011-09-22 13 views
7

Jestem bardzo początkującym programistom Android. Chcę znaleźć numer IMEI telefonu i za pomocą "android.telephony.TelephonyManager;".Używanie aplikacji Telefonia Manager w systemie Android do znajdowania numeru IMEI

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

Teraz kompilator mówi. Kontekstu nie można rozstrzygnąć na zmienną. Ktoś może mi pomóc? Brakujący krok Mam również uprawnienia użytkownika w XML.

Odpowiedz

14

Zweryfikuj importu, należy zaimportować: android.content.Context,

a następnie użyć tego kodu:

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

lub bezpośrednio: użyj tego:

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

EDIT: * powinieneś przekazać kontekst swojej nowej klasie konstruktorowi: *

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 
    } 

} 

A w swojej działalności, instanciate swoją klasę i przekazać kontekst do niego tak:

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

jest taka sama jak jego pytanie .. –

+0

zobaczyć mój Edit ... – Houcine

+0

jego okey teraz, ale następnym razem najpierw przeczytać uważnie po czym pytanie dać odpowiedź w odpowiedni sposób –

1

błędu kompilatora „Context nie mogą być rozwiązane do zmiennej”, upewnij się, że importowane android.content.Context pakiet.
W Eclipse, szybkie poprawki miałyby go, gdy przesuniesz wskaźnik myszy nad linią błędu w kodzie.
Upewnij się, że dodano uprawnienie READ_PHONE_STATE Manifiest file.

2

prostu usunąć Context słowa kluczowego w Context.TELEPHONY_SERVICE i sprawdzić

TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 

String IMEI = tManager.getDeviceId(); 
8

Dodaj w tym kodzie:

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

//Device Id is IMEI number 

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

Manifest

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

[W przypadku, jeśli ktoś nadal potyka tu szukasz to wciąż istniejące odwieczne rozwiązanie]

AFAIK, TelephonyManager.getLine1Number() nie jest wiarygodna ze względu na różne ograniczenia z operatorami. Istnieje kilka hacków opartych na refleksji w języku Java, ale różni się w zależności od urządzenia, co czyni te hacki raczej bezużytecznymi [przynajmniej pod względem obsługiwanych modeli]

Ale istnieje uzasadniona zgodna z prawem logika, aby znaleźć numer, jeśli naprawdę potrzebujesz więc. Wyślij zapytanie do wszystkich SMS-ów przez dostawcę SMS-a i zdobądź numer "Do".

Dodatkowe korzyści z tej sztuczki: 1. można znaleźć wszystkie numery linii, jeśli istnieje wiele SIM w urządzeniu.

Minusy: 1. Będziesz potrzebować uprawnienia SMS_READ [przepraszam za to] 2. Otrzymasz wszystkie numery sim użyte w urządzeniu. ten problem można zminimalizować za pomocą pewnej logiki ograniczającej, np. ramy czasowe (SMS odbierane lub wysyłane tylko dzisiaj) itd. To byłoby interesujące usłyszeć od innych, o tym, jak poprawić tę sprawę.

4

Spróbuj poniżej kodu, który pomoże ci uzyskać numer IMEI urządzenia.

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; 
} 

Należy również podać uprawnienie do odczytu stanu telefonu w manifeście.

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