Сбой TelephonyManager.getLine1Number ()? - PullRequest
       5

Сбой TelephonyManager.getLine1Number ()?

30 голосов
/ 27 февраля 2011

Я хочу получить номер телефона устройства Android.Я использую этот код:

TelephonyManager tm = (TelephonyManager)this.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
String phoneNumber=  tm.getLine1Number();

На моем телефоне (HTC Wildfire) я не могу получить номер телефона - все, что я получаю, это пустая строка.Если я запускаю код на emulatur, обычно отображается номер телефона.

Если я захожу в Настройки => О телефоне => Идентификатор телефона-> Номер телефона, номер телефона "Неизвестно"

Где проблема?Что-то не так с моей SIM-картой?

Ответы [ 6 ]

35 голосов
/ 27 февраля 2011

У нас была такая же проблема в нашем проекте.Был сделан вывод, что это зависит от SIM-карты.

Что с нами произошло:

  • Galaxy S с SIM-картой AT & T: можно прочитать номер телефона, в настройках отображается номер
  • Та же самая галактика с европейской SIM-картой: невозможно прочитать номер и «неизвестно» в настройках (мобильный телефон функционировал отлично, просто не смог прочитать номер)

Об этом сообщалось в другихна форумах.

В итоге мы решили спросить у пользователя номер телефона.На самом деле немного сложнее: if( "SIM card present" && "cannot read the cell number") "ask user"; .В противном случае мы будем продолжать глючить пользователя, который не имеет SIM-карты.

11 голосов
/ 04 июля 2012

Вместо номера телефона используйте серийный номер SIM-карты, который всегда существует и всегда является действительным значением.

 telephonyManager.getSimSerialNumber();

Серийный номер SIM-карты является уникальным как минимум для оператора.Таким образом, в сочетании с

 telephonyManager.getNetworkOperator();

у вас будет уникальный идентификатор для абонента внутри страны.

В сочетании с

 telephonyManager.getNetworkCountryIso();

вы получите глобальноуникальный идентификатор подписчика.

Надеюсь, это поможет.

Приветствия.

5 голосов
/ 27 февраля 2011

SIM-карта хранит номер телефона и может быть отредактирован вами.Не могу сказать, для Android, но на WM вы можете легко редактировать свой номер телефона, который хранится на SIM-карте.Конечно, это не значит, что вы можете изменить свой номер телефона на лету.На самом деле, вы можете написать там любое число, которое вам нравится, и программы поверит, что это ваш реальный номер:)

2 голосов
/ 19 мая 2011

Когда я переносил SIM-карту в новый телефон, я иногда обнаруживал, что номер телефона не отображается в меню «Настройки» -> «О телефоне» -> «Состояние» -> «Мой номер телефона».

Мои данные:

  • AT & T Atrix, вставив в него совершенно новую SIM-карту, говорит: «Голос MSISDN Line1 null».
  • T-Mobile G1, правильно вставив в него новую SIM-карту, отображает номер телефона.
  • T-Mobile G2 переносит SIM-карту из моего старого G1 в «Неизвестно».
0 голосов
/ 19 ноября 2013

Я использую сим-карту, которая разрешает только передачу данных.Он не разрешает телефонные звонки.

Когда я пытаюсь получить номер телефона с помощью getLine1Number(), я получаю пустую строку.

0 голосов
/ 13 апреля 2012

Номер телефона доступен, если SIM-карта позволяет получить его. В нашей компании я нашел только одну SIM-карту, которой разрешено получать номер. Я тестирую эту SIM-карту на всех устройствах Android. Все ок. getLine1Number () в порядке. Сейчас я ищу номер телефона для другой симки. Пришлите смс на наш смс-сервер или другое андроид устройство (с обработкой смс)

...