2011-09-22 10 views
7

Soy muy nuevo en el desarrollo de Android. Quiero encontrar el número de IMEI del teléfono y usar "android.telephony.TelephonyManager;".Usando el Administrador de telefonía en android para encontrar el número de IMEI

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

Ahora el compilador dice. El contexto no se puede resolver en una variable. ¿Alguien me puede ayudar? ¿Qué paso me falta? También he incluido el permiso del usuario en XML.

Respuesta

14

Compruebe las importaciones, debe importar: android.content.Context,

Y a continuación, utilizar este código:

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
// get IMEI 
String imei = tm.getDeviceId(); 
//get The Phone Number 
String phone = tm.getLine1Number(); 

O directamente: utilice este:

TelephonyManager tm = (TelephonyManager) getSystemService(android.content.Context.TELEPHONY_SERVICE); 

EDIT: * debe pasar el contexto a su nueva Clase en el constructor: *

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 
    } 

} 

Y en su actividad, instanciar la clase y pasar el contexto de esta manera:

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

es igual a su pregunta .. –

+0

ver mi Editar ... – Houcine

+0

su okey ahora pero la próxima vez leyó por primera pregunta con cuidado después de entonces dar respuesta en forma correcta –

1

Para el error del compilador "El contexto no se puede resolver a una variable", asegúrese de que haya importado android.content.Context paquete.
En Eclipse, las soluciones rápidas lo tendrían cuando mueva el puntero del mouse sobre la línea de error en el código.
Y asegúrese de haber agregado READ_PHONE_STATE el archivo de autorización de archivo.

2

basta con retirar Context palabra clave en Context.TELEPHONY_SERVICE y comprobar

TelephonyManager tManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 

String IMEI = tManager.getDeviceId(); 
8

Añadir en este código:

TelephonyManager manager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
String deviceid=manager.getDeviceId(); 

//Device Id is IMEI number 

    Log.d("msg", "Device id"+deviceid); 

Manifiesto

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

[En caso de que si alguien todavía tropieza aquí buscando esta solución histórica todavía existente]

AFAIK, TelephonyManager.getLine1Number() no es confiable debido a varias limitaciones de los operadores. Existen algunos ataques basados ​​en la reflexión de java, pero varían de un dispositivo a otro haciendo que esos hacks sean inútiles [al menos en términos de modelos admitidos]

Pero existe una lógica legal legítima para encontrar el número, si realmente lo necesita asi que. Consulta todos los SMS por proveedor de sms y obtén el número "Para".

Beneficios adicionales de este truco: 1. puede obtener todos los números de línea si hay multi sim en el dispositivo.

Contras: 1. necesitará el permiso SMS_READ [disculpe] 2. Obtendrá todos los números SIM que se hayan usado alguna vez en el dispositivo. este problema se puede minimizar con alguna lógica de restricción, p. marco de tiempo (sms recibidos o enviados solo hoy), etc. Sería interesante escuchar a otros sobre cómo mejorar este caso.

4

Pruebe debajo del código que le ayudará a obtener el número IMEI del dispositivo.

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; 
} 

También conceda el permiso de estado del teléfono de lectura en su manifiesto.

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