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

17

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

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

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

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

Привет     

задан omega 14.04.2011 в 00:43
источник
  • Ну, оказалось, что некоторые Android-телефоны не возвращают полный Imsi (ошибка). Я использовал специальное оборудование для извлечения imsi из сима, и он извлек полный imsi, а это значит, что сим был в порядке. Таким образом, проблемы - это неспособность Android извлечь весь IMSI. Я нашел эту ошибку в Sony Ericsson Mini Experia. –  omega 01.06.2011 в 18:08

3 ответа

7

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

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

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

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

    
ответ дан Aleadam 14.04.2011 в 01:03
  • Мне не удалось найти никаких упоминаний о классе android.telephony.TelephonyProperties, только com.android.internal.telephony.TelephonyProperties, но там нет постоянной PROPERTY_IMSI. –  Miha_x64 17.02.2017 в 18:03
5

сначала: из Wiki

  

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

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

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

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

    
ответ дан bogdan 27.02.2012 в 11:39
4

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

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

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

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    
ответ дан juyujuyu 16.04.2015 в 04:42
  • Хотя я призываю вас стать активными в SO, это ответ на вопрос, заданный 4 года назад. Кроме того, ваш ответ, похоже, не привнесет никаких новых выдающихся элементов в существующие ответы, и исходный вопрос был отмечен автором как ответ. Программное обеспечение и SO развиваются быстро, пожалуйста, рассмотрите новые вопросы или ответы на оставшиеся вопросы. –  Jonathan Drolet 16.04.2015 в 05:14