получить номер телефона программно в Android - PullRequest
12 голосов
/ 10 мая 2011

Я использую код

TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
  mPhoneNumber = tMgr.getLine1Number();

, чтобы не получить телефон программно в Android.Но это работает нормально только для одной сим-карты.Если я проверю этот код, вставив другую сим-карту, он выдаст null.Я пытаюсь найти решение для этого.Помогите мне, пожалуйста.Я также включил READ_PHONE_STATE разрешение в Manifest.

Я хочу однозначно идентифицировать сим-карту.Есть ли другой способ сделать это.пожалуйста, дайте мне знать.

Ответы [ 4 ]

8 голосов
/ 21 июня 2011

Я думаю, что серийный номер Сима уникален. Вы можете попробовать это.

TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String getSimSerialNumber = telemamanger.getSimSerialNumber();

Дайте мне знать, если есть какие-либо проблемы.

1 голос
/ 10 мая 2011

Найдите TelephonyManager.getSubscriberId (), это даст уникальный идентификатор для каждой SIM-карты.

1 голос
/ 10 мая 2011

Это известная проблема. Многие SIM-карты по всему миру будут возвращать ноль. Вы должны использовать номер IMEI, однако даже это может вернуть ноль.

TelephonyManager.getDeviceId()
0 голосов
/ 24 декабря 2018

При уровне API больше или равном 22: Вы можете получить доступ ко всем данным SIM-карты, используя SubscritionManager . Используйте следующую команду для получения списка всех номеров симов (также хорошо работает для Dual Sim):

List<SubscriptionInfo> list = SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
for(SubscriptionInfo s : list){
   Log.d("SIMMANAGER",s.getNumber());
}

Примечание. Работает только тогда, когда оператор хранит номер своего мобильного телефона на SIM-карте. Иначе, этот метод возвращает ноль.

...