Как получить номер мобильного телефона текущей сим-карты в реальном устройстве? - PullRequest
35 голосов
/ 05 февраля 2010

Я должен сделать приложение, которое показывает номер контакта SIM-карты, которая используется в ячейке. Для этого мне нужно использовать TelephonyManager класс. Могу ли я получить подробную информацию о его использовании?

Ответы [ 6 ]

64 голосов
/ 05 февраля 2010

Вы можете использовать TelephonyManager, чтобы сделать это:

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String number = tm.getLine1Number();

В документации для getLine1Number() говорится, что этот метод вернет null, если число «недоступно», но не говорит, когда число может быть недоступно.

Вам необходимо дать приложению разрешение на выполнение этого запроса , добавив в свой манифест следующее:

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

(Вы не должны использовать TelephonyManager.getDefault(), чтобы получить TelephonyManager как , который является частным недокументированным вызовом API и может измениться в будущем .)

6 голосов
/ 13 ноября 2013

Привет. На самом деле это мой вопрос, но я ничего не получил. Теперь я получил номер мобильного телефона и его адрес электронной почты с определенного реального устройства Android (Android Mobile). Теперь 90% людей используют приложение App на Android. Mobile. А теперь я получаю номер мобильного телефона и идентификатор электронной почты через API-интерфейс приложения What What. Это очень просто использовать, см. Следующий код.

            AccountManager am = AccountManager.get(this);
            Account[] accounts = am.getAccounts();
      for (Account ac : accounts) 
       {
        acname = ac.name;

        if (acname.startsWith("91")) {
            mobile_no = acname;
        }else if(acname.endsWith("@gmail.com")||acname.endsWith("@yahoo.com")||acname.endsWith("@hotmail.com")){
            email = acname;
        }

        // Take your time to look at all available accounts
        Log.i("Accounts : ", "Accounts : " + acname);
    }

и импортируйте этот API

    import android.accounts.Account;
    import android.accounts.AccountManager;
3 голосов
/ 29 января 2014

Я должен сделать приложение, которое показывает номер контакта SIM-карты, которая используется в ячейке. Для этого мне нужно использовать класс диспетчера телефонии. Могу ли я получить подробную информацию о его использовании?

Да, Вы должны использовать диспетчер телефонии, если вообще не нашли контакт, нет. пользователя; Вы можете получить серийный номер Sim-карты Sim-карты и Imei для Android-устройства, используя тот же класс Telephony Manager ...

Добавить разрешение:

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

Импорт:

import android.telephony.TelephonyManager;

Используйте следующий код:

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

         // get IMEI
         imei = tm.getDeviceId();

         // get SimSerialNumber
         simSerialNumber = tm.getSimSerialNumber();
1 голос
/ 28 октября 2016

Ну, все это могут быть временные взломы, но нет способа получить номер мобильного телефона пользователя. Это против этической политики.

Например, один из приведенных выше ответов предлагает получить все учетные записи и извлечь их оттуда. И это больше не работает! Все это только хаки.

Единственный способ получить номер мобильного телефона - через оператора. Если у вас есть связь с мобильными операторами, такими как Aitel, Vodafone и т. Д., Вы можете получить номер мобильного телефона пользователя в заголовке запроса с мобильного телефона при подключении через мобильную сеть Интернет.

Не уверен, что могут помочь какие-либо производители, чтобы получить определенные разрешения - не исследовал эту область, но ничего не задокументировано, по крайней мере.

0 голосов
/ 18 декабря 2011

Иногда вы можете получить номер телефона с USSD-запросом к вашему оператору. Например, я могу получить свой номер телефона, набрав * 116 # Вероятно, это может быть сделано в приложении, я думаю, , если ответ USSD как-то может быть перехвачен. Конечно, это не тот метод, который я бы порекомендовал использовать в приложении, которое должно распространяться, код может даже различаться у разных операторов.

0 голосов
/ 14 ноября 2011

Как многие говорили:

String phoneNumber = TelephonyManager.getDefault().getLine1Number();

Доступность зависит только от оператора и способа кодирования номера на SIM-карте. Если он жестко задан компанией, которая производит SIM-карты, или самим оператором мобильной связи. Это возвращает так же, как в настройках-> о телефоне.

...