Получение IMSI с телефона Android?

Я разрабатываю приложение, которое требует получить IMSI. Я использую:

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

Он работает для большинства телефонов, но несколько телефонов возвращают только 6 цифр вместо 15. Что не так.

Кто-нибудь знает альтернативный способ получения IMSI программно? Другие APIS? методы?

Привет

Ответ 1

В соответствии с этот пост вы можете использовать

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

но SystemProperties недоступен напрямую, поэтому вам нужно будет использовать один из трюков в ответах на этот вопрос: Где находится android.os.SystemProperties

Вам также может понадобиться SystemProperties source.

Ответ 2

сначала: из Wiki

IMSI обычно представляется как 15 длинное число, но может быть короче

короче относится к более ранней модели imsi, которая была 14 цифр. здесь это не актуально.

секунда: это не зависит от трубки, а от сети

он возвращает 6 цифр, потому что программное обеспечение Android на этом конкретном телефоне настроено на возврат только неличной идентифицирующей части imsi - первых 6 цифр, которые определяют страну и оператора сети

Ответ 3

Этот код хорошо работает в моем проекте.

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

и не забудьте разрешение:

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