13

I m very new to Android Development. I want to find the IMEI number of the phone and using "android.telephony.TelephonyManager;".

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

Now the compiler says. Context cannot be resolved to a variable. Any one can help me ? What step I m missing I have also included user permission in XML.

4

6 回答 6

22

验证您的进口,您应该进口: 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();
于 2011-09-22T11:42:25.867 回答
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" />
于 2012-06-26T07:41:04.753 回答
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"/>
于 2015-11-02T05:23:16.333 回答
2

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

TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

String IMEI = tManager.getDeviceId();
于 2011-09-22T11:55:42.717 回答
1

对于编译器错误“上下文无法解析为变量”,请确保您已导入android.content.Context包。
在 Eclipse 中,当您将鼠标指针移到代码中的错误行上时,快速修复将具有它。
并确保您已添加READ_PHONE_STATE权限清单文件。

于 2011-09-22T11:55:23.260 回答
0

[如果有人仍然在这里偶然发现这个仍然存在的古老解决方案]

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

但是如果你真的需要的话,找到这个数字是合法的。通过短信提供商查询所有短信并获取“收件人”号码。

这个技巧的额外好处:1.如果设备中有multi sim,您可以获得所有行号。

缺点: 1. 您需要 SMS_READ 权限 [对此感到抱歉] 2. 您将获得设备中曾经使用过的所有 sim 号码。这个问题可以通过一些约束逻辑来最小化,例如时间框架(只在今天收到或发送短信)等。听听其他人关于如何改进这种情况会很有趣。

于 2015-01-07T12:00:09.123 回答