在android中使用电话pipe理器来查找IMEI号码

我对Android开发很陌生。 我想find手机的IMEI号码并使用“android.telephony.TelephonyManager”。

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

编译器现在说。 上下文无法parsing为variables。 任何人都可以帮助我? 我错过了什么步骤,我也包含了XML中的用户权限。

Solutions Collecting From Web of "在android中使用电话pipe理器来查找IMEI号码"

validation你的Imports,你应该导入: 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 } } 

而在你的Activity中,实例化你的类并把它传递给它:

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

在此代码中添加:

  TelephonyManager manager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String deviceid=manager.getDeviceId(); //Device Id is IMEI number Log.d("msg", "Device id"+deviceid); 

performance

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

尝试下面的一段代码,它会帮助你获得设备的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"/> 

只需在Context.TELEPHONY_SERVICE删除Context关键字并检查

 TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String IMEI = tManager.getDeviceId(); 

对于编译器错误“上下文无法parsing为variables”,请确保已经导入了android.content.Context包。
在Eclipse中,当您将鼠标指针移动到代码中的错误行上时,快速修复将会有所帮助。
并确保您已经添加了READ_PHONE_STATE权限Manifiest文件。

[如果有人仍然在这里寻找这个仍然存在的古老的解决scheme磕磕绊绊]

AFAIK,TelephonyManager.getLine1Number()由于操作员的各种限制而不可靠。 有一些基于Javareflection的黑客攻击,但随着设备的不同而不同,从而使这些黑客毫无用处[至less在支持模型方面]

但是,如果你确实需要的话,那么find这个号码是合法的。 通过短信提供商查询所有的短信,并获得“收件人”号码。

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

缺点:1.你将需要SMS_READ权限[对不起] 2.你将得到所有在设备中使用的SIM卡号码。 这个问题可以通过一些约束逻辑(例如,时间帧(短信接收或仅在今天发送)等)来最小化。从别人那里听到如何改善这种情况是很有趣的。