2011-09-22 67 views
7

我对Android开发非常陌生。 我想查找手机的IMEI号码并使用“android.telephony.TelephonyManager;”。在Android中使用电话管理器来查找IMEI号码

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

现在编译器说。 上下文无法解析为变量。 任何人都可以帮助我吗?我错过了什么步骤 我还在XML中包含了用户权限。

回答

14

验证你的进口,你应该导入:android.content.Context

,然后使用此代码:

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

或者直接:使用此:

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

编辑: * 你应该将上下文传递给构造函数中的新类: *

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 
    } 

} 

而在你的活动,实例化类,并通过上下文中这样说:

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

是一样的他的问题.. –

+0

看到我的编辑... – Houcine

+0

它的好,但现在下一次先读问题后,仔细然后给答案正确的方式 –

1

编译器错误“上下文不能被解析为一个变量”,请确保您已导入android.content.Context包。
在Eclipse中,当您将鼠标指针移动到代码中的错误行上时,快速修复会有它。
并确保您已添加READ_PHONE_STATE权限Manifiest文件。

2

只是删除Context关键字Context.TELEPHONY_SERVICE和检查

TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 

String IMEI = tManager.getDeviceId(); 
8

添加此代码:

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

//Device Id is IMEI number 

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

清单

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

[在情况下,如果还有人跌倒在这里寻找这仍然存在古老的解决方案]

由于操作员的各种限制,AFAIK,TelephonyManager.getLine1Number()不可靠。 有一些基于Java反射的黑客攻击,但因设备而异,因此使这些黑客毫无用处[至少在支持模式方面]

但是,如果您确实需要找到该号码,则存在合法的合法逻辑所以。通过短信提供商查询所有短信并获取“收件人”号码。

这个技巧的其他好处:1.如果设备中有多个SIM卡,你可以得到所有的线路号码。

缺点:1.您需要SMS_READ权限[对不起] 2.您将获得设备中曾经使用的所有SIM卡号码。这个问题可以通过一些约束逻辑来最小化。时间范围(仅在今天收到或发送的短信)等。听取其他人关于如何改善这种情况的信息会很有趣。

4

请尝试下面的一段代码,它将帮助您获取设备IMEI号码。

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

此外,还要在清单中给出读取手机状态权限。

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