Получение 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"/>