我对Android开发很新。 我想找到手机的IMEI号并使用“android.telephony.TelephonyManager;”。
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getDeviceId();
现在编译器说。 上下文无法解析为变量。 任何人都可以帮助我吗?我错过了什么步骤 我还在XML中包含了用户权限。
答案 0 :(得分:16)
验证您的导入,您应导入: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();
答案 1 :(得分: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" />
答案 2 :(得分: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"/>
答案 3 :(得分:2)
只需移除Context
中的Context.TELEPHONY_SERVICE
关键字并检查
TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String IMEI = tManager.getDeviceId();
答案 4 :(得分:1)
对于编译器错误“无法将上下文解析为变量”,请确保已导入android.content.Context
包。
在Eclipse中,当您将鼠标指针移动到代码中的错误行上时,可以快速修复它。
并确保添加了READ_PHONE_STATE
权限Manifiest文件。
答案 5 :(得分:0)
[如果有人仍然在这里寻找这个仍然存在的古老解决方案]
AFAIK,由于运营商的各种限制,TelephonyManager.getLine1Number()不可靠。 有一些基于java反射的黑客攻击,但因设备而异,因此这些黑客攻击有点无用[至少在支持的模型方面]
但是,如果你真的需要,那么找到这个数字是合法的合法逻辑。通过短信提供商查询所有短信并获取“收件人”号码。
这个技巧的额外好处:1。如果设备中有多个SIM卡,您可以获得所有行号。
缺点:1。您需要SMS_READ权限[对不起] 2.您将获得设备中使用的所有SIM卡号码。用一些约束逻辑可以最小化这个问题,例如时间框架(仅在今天收到或发送短信)等。从其他人那里听到如何改进此案例将会很有趣。