2011-09-22 24 views
7

Tôi rất mới phát triển Android. Tôi muốn tìm số IMEI của điện thoại và sử dụng "android.telephony.TelephonyManager;".Sử dụng Trình quản lý điện thoại trong Android để tìm số IMEI

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

Bây giờ trình biên dịch cho biết. Ngữ cảnh không thể được giải quyết thành một biến. Bất kỳ ai có thể giúp tôi? Bước nào tôi mất tích Tôi cũng đã bao gồm sự cho phép của người dùng trong XML.

Trả lời

14

Xác Nhập khẩu của bạn, bạn nên nhập: android.content.Context,

Và sau đó sử dụng mã này:

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

Hoặc trực tiếp: sử dụng này:

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

EDIT: * bạn nên chuyển ngữ cảnh đến Lớp mới của bạn trên hàm tạo: *

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 
    } 

} 

Và trong hoạt động của bạn, instanciate lớp học của bạn và vượt qua các ngữ cảnh để nó như thế này:

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

nó là giống như câu hỏi của anh .. –

+0

thấy Chỉnh sửa của tôi ... – Houcine

+0

okey của nó bây giờ nhưng thời gian tiếp theo đầu tiên đọc câu hỏi một cách cẩn thận sau khi sau đó cung cấp câu trả lời theo cách thích hợp –

1

Đối với lỗi biên dịch "Bối cảnh không thể giải quyết cho một biến", hãy chắc chắn bạn đã nhập android.content.Context gói.
Trong Eclipse, các bản sửa lỗi nhanh sẽ có khi bạn di chuyển con trỏ chuột qua dòng lỗi trong mã.
Và đảm bảo rằng bạn đã thêm READ_PHONE_STATE quyền Manifiest tệp.

2

chỉ cần loại bỏ Context từ khóa trong Context.TELEPHONY_SERVICE và kiểm tra

TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 

String IMEI = tManager.getDeviceId(); 
8

Thêm vào mã này:

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

[Trong trường hợp nếu ai vẫn còn tình cờ ở đây tìm kiếm giải pháp cũ này vẫn còn tồn tại]

AFAIK, TelephonyManager.getLine1Number() không đáng tin cậy do các ràng buộc khác nhau từ các toán tử. Có một số hack dựa trên phản xạ java nhưng thay đổi từ thiết bị đến thiết bị do đó làm cho những hacks sắp xếp vô dụng [ít nhất là về mô hình được hỗ trợ]

Nhưng có một logic hợp pháp hợp pháp để tìm số, nếu bạn thực sự cần vì thế. Truy vấn tất cả SMS của nhà cung cấp sms và nhận số "Tới".

Lợi ích bổ sung của mẹo này: 1. bạn có thể nhận được tất cả số dòng nếu có nhiều sim trong thiết bị.

Nhược điểm: 1. bạn sẽ cần quyền SMS_READ [xin lỗi vì điều đó] 2. Bạn sẽ nhận được tất cả số sim được sử dụng trong thiết bị. vấn đề này có thể được giảm thiểu với một số logic ràng buộc, ví dụ: khung thời gian (sms nhận hoặc gửi chỉ ngày hôm nay) vv Nó sẽ là thú vị để nghe từ những người khác về làm thế nào để cải thiện trường hợp này.

4

Hãy thử đoạn mã bên dưới nó sẽ giúp bạn lấy số IMEI của thiết bị.

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

Cũng cấp quyền đọc trạng thái điện thoại trong tệp kê khai của bạn.

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
Các vấn đề liên quan