在android中使用Telephony Manager查找IMEI号码

时间:2011-09-22 11:41:15

标签: android imei

我对Android开发很新。 我想找到手机的IMEI号并使用“android.telephony.TelephonyManager;”。

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

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

6 个答案:

答案 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卡号码。用一些约束逻辑可以最小化这个问题,例如时间框架(仅在今天收到或发送短信)等。从其他人那里听到如何改进此案例将会很有趣。