android - replacement - msisdn movistar
obtener IMSI desde el teléfono Android? (3)
Estoy desarrollando una aplicación que requiere obtener el IMSI. Yo suelo:
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 solo devuelven 6 dígitos en lugar de 15. Lo que está mal.
¿Alguien sabe una forma alternativa de recuperar el IMSI programáticamente? Otros APIS? métodos?
Saludos
Este código funciona bien en mi proyecto.
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imsi = telephonyManager.getSubscriberId();
y no olvides el permiso
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Según este post podéis utilizar
String imsi = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);
pero SystemProperties no está accesible directamente, por lo que deberá usar uno de los trucos de las respuestas para esta pregunta: ¿Dónde está android.os.SystemProperties?
También puede necesitar la fuente SystemProperties
.
primero: de wiki
Un IMSI generalmente se presenta como un número largo de 15 dígitos, pero puede ser más corto
más corto se refiere a un modelo imsi más antiguo que tenía 14 dígitos. no es relevante aquí
Segundo: no depende del teléfono sino de la red.
devuelve 6 dígitos porque el software de Android en ese teléfono en particular está configurado para devolver solo la parte de identificación no personal del imsi, los primeros 6 dígitos que definen el país y el operador de red