2011-04-13 17 views
17

Estoy desarrollando una aplicación que requiere para obtener el IMSI. Yo uso:obteniendo IMSI del teléfono Android?

TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
String imsi = mTelephonyMgr.getSubscriberId(); 

Funciona para la mayoría de los teléfonos, pero unos pocos teléfonos devolver sólo 6 dígitos en lugar de 15. ¿Cuál es incorrecto.

¿Alguien sabe una forma alternativa de recuperar el IMSI programáticamente? Otro APIS? métodos?

Saludos

+0

Bueno, resultó que algunos teléfonos Android no devuelven el IMSI completa (bug). Usé hardware especial para extraer el imsi del sim y extrajo el imsi completo, lo que significa que el sim estaba bien. Por lo tanto, el problema es que Android no puede extraer el IMSI completo. Encontré este error en el Sony Ericsson Mini Experia. – omega

Respuesta

7

Según this post puede utilizar

String imsi = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI); 

pero SystemProperties no es directamente accesible, por lo que tendrá que utilizar uno de los trucos en las respuestas a esta pregunta: Where is android.os.SystemProperties

También puede necesitar SystemProperties source.

+0

No he podido encontrar ninguna mención de la clase 'android.telephony.TelephonyProperties', only' com.android.internal.telephony.TelephonyProperties', pero no hay ninguna constante 'PROPERTY_IMSI' allí. –

5

primero: de Wiki

Una IMSI se presenta generalmente como un número de larga 15 dígitos, pero puede ser más corto

más corto se refiere a un modelo de IMSI antiguo que fue de 14 dígitos . que no es relevante aquí

segundo: que no depende del teléfono sino más bien en la red

devuelve 6 dígitos ya que el software androide en ese teléfono en particular está configurado para devolver sólo la parte no personal de identificación del imsi: los primeros 6 dígitos que definen el país y el operador de red

3

Este código funciona bien en mi proyecto.

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
String imsi = telephonyManager.getSubscriberId(); 

y no se olvide el permiso:

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

Aunque le animo a que se active en SO, esta es una respuesta a una pregunta hecha hace 4 años. Además, su respuesta no parece traer nuevos elementos destacados a las respuestas existentes y la pregunta original ha sido marcada por el autor como respondida. El software y SO están evolucionando rápidamente, por favor considere nuevas preguntas o preguntas sin respuesta para responder. –

Cuestiones relacionadas