在android中使用电话管理器查找IMEI号码
Posted
技术标签:
【中文标题】在android中使用电话管理器查找IMEI号码【英文标题】:Using Telephony Manager in android to find IMEI number 【发布时间】:2011-11-22 18:30:39 【问题描述】:我对 android 开发非常陌生。 我想查找手机的 IMEI 号码并使用“android.telephony.TelephonyManager;”。
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getDeviceId();
现在编译器说。 上下文无法解析为变量。 任何人都可以帮助我吗?我错过了什么步骤 我还在 XML 中包含了用户权限。
【问题讨论】:
【参考方案1】:试试下面的代码,它将帮助您获取设备的 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"/>
【讨论】:
【参考方案2】:[如果有人仍然在这里跌跌撞撞地寻找这个仍然存在的古老解决方案]
AFAIK,由于运营商的各种限制,TelephonyManager.getLine1Number() 不可靠。 有一些基于 Java 反射的 hack,但因设备而异,因此这些 hack 毫无用处[至少在支持的模型方面]
但是如果你真的需要的话,有一个合法的逻辑可以找到这个数字。通过短信服务商查询所有短信,获取“收件人”号码。
此技巧的额外好处:1.如果设备中有multi sim,您可以获得所有行号。
缺点:1. 您需要 SMS_READ 权限 [对此感到抱歉] 2.您将获得设备中使用过的所有SIM卡号码。这个问题可以通过一些约束逻辑来最小化,例如时间范围(仅在今天收到或发送的短信)等。听听其他人关于如何改进此案例会很有趣。
【讨论】:
【参考方案3】:加入这段代码:
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" />
【讨论】:
【参考方案4】:验证您的导入,您应该导入: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();
【讨论】:
现在还可以,但下次先仔细阅读问题,然后以适当的方式给出答案 我已经仔细阅读了这个问题,在它被编辑之前我已经阅读了它,问题是:获取 IMEI 号码,这不是更详细的 :) 他被问到示例代码的问题,现在有问题,但格式不好,所以我只是添加了他的问题..但他用示例代码问了问题..还有一件事兄弟我不想和你吵架,我只是建议你别无所求.. 大声笑,我也是,我不和你打架,来吧!我也只是告诉你,我已经仔细阅读了这个问题,感谢你的建议:) 谢谢大家,我没有导入android.content.Context。【参考方案5】:只需删除 Context.TELEPHONY_SERVICE
中的 Context
关键字并检查
TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String IMEI = tManager.getDeviceId();
【讨论】:
【参考方案6】:对于编译器错误“无法将上下文解析为变量”,请确保您已导入 android.content.Context
包。 在 Eclipse 中,当您将鼠标指针移到代码中的错误行上时,会进行快速修复。并确保您已添加 READ_PHONE_STATE
权限清单文件。
【讨论】:
以上是关于在android中使用电话管理器查找IMEI号码的主要内容,如果未能解决你的问题,请参考以下文章