Программно получить номер телефона телефона Android

Как я могу программно получить номер телефона устройства, на котором запущено приложение для Android?

Solutions Collecting From Web of "Программно получить номер телефона телефона Android"

Код:

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

Требуемое разрешение:

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

Предостережения:

В соответствии с очень высокими комментариями, есть несколько предостережений, о которых нужно знать. Это может возвращать null или "" или даже "???????" , И он может вернуть устаревший номер телефона, который больше недействителен. Если вы хотите что-то, что однозначно идентифицирует устройство, вы должны использовать getDeviceId() .

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

Я знаю, что это боль, но, скорее всего, лучшим решением является просто попросить пользователя ввести свой номер телефона и сохранить его.

Обновление: этот ответ больше не доступен, так как Whatsapp остановил раскрытие номера телефона в качестве имени учетной записи, любезно проигнорируйте этот ответ.

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

На сегодняшний день вы можете положиться на другое большое приложение Whatsapp, используя AccountManager. Миллионы устройств имеют это приложение, и если вы не можете получить номер телефона через TelephonyManager, вы можете сделать это.

Разрешение:

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

Код:

 AccountManager am = AccountManager.get(this); Account[] accounts = am.getAccounts(); for (Account ac : accounts) { String acname = ac.name; String actype = ac.type; // Take your time to look at all available accounts System.out.println("Accounts : " + acname + ", " + actype); } 

Проверить actype для учетной записи whatsapp

 if(actype.equals("com.whatsapp")){ String phoneNumber = ac.name; } 

Конечно, вы можете не получить его, если пользователь не установил Whatsapp, но его стоит попробовать в любом случае. И помните, что вы всегда должны запрашивать у пользователя подтверждение.

Как указано в моем предыдущем ответе

Используйте нижеприведенный код:

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

В AndroidManifest.xml дайте следующее разрешение:

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

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

Кроме того, попробуйте проверить в телефоне -> Настройки -> О программе -> Идентификация телефона. Если вы можете просмотреть номер там, вероятность получить номер телефона выше кода выше. Если вы не можете просмотреть номер телефона в настройках, вы не сможете получить этот код!

Предлагаемое обходное решение:

  1. Получите номер телефона пользователя как ручной ввод от пользователя.
  2. Отправьте код на номер мобильного телефона с помощью SMS.
  3. Попросите пользователя ввести код для подтверждения номера телефона.
  4. Сохраните номер в sharedpreference.

Сделайте вышеуказанные 4 шага как однократную активность во время первого запуска приложения. Позже, когда требуется номер телефона, используйте значение, доступное в общих предпочтениях.

 private String getMyPhoneNumber(){ TelephonyManager mTelephonyMgr; mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); return mTelephonyMgr.getLine1Number(); } private String getMy10DigitPhoneNumber(){ String s = getMyPhoneNumber(); return s != null && s.length() > 2 ? s.substring(2) : null; } 

Код, взятый из http://www.androidsnippets.com/get-my-phone-number

Просто хочу добавить немного к приведенным выше объяснениям в приведенных выше ответах. Который сэкономит время и для других.

В моем случае этот метод не вернул номер мобильного телефона, была возвращена пустая строка. Это было связано с тем, что я портировал свой номер на новом симе. Поэтому, если я зашел в Настройки> О телефоне> Статус> Мой номер телефона, он показывает мне «Неизвестно».

Иногда код ниже возвращает null или пустую строку.

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

С разрешением ниже

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

Есть еще один способ, которым вы сможете получить свой номер телефона, я не тестировал его на нескольких устройствах, но выше код не работает каждый раз.

Попробуйте под кодом:

 String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"}; Object object = getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"), main_data, "mimetype=?", new String[]{"vnd.android.cursor.item/phone_v2"}, "is_primary DESC"); if (object != null) { do { if (!((Cursor) (object)).moveToNext()) break; // This is the phoneNumber String s1 = ((Cursor) (object)).getString(4); } while (true); ((Cursor) (object)).close(); } 

Вам нужно будет добавить эти два разрешения.

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

Надеюсь, это поможет, спасибо!

Это более упрощенный ответ:

 public String getMyPhoneNumber() { return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) .getLine1Number(); } 

TelephonyManager не подходит для решения. Потому что в некоторых случаях номер не сохраняется на SIM-карте. Из-за моего предложения вам следует использовать Shared Preference, чтобы сначала сохранить номер телефона пользователя, когда приложение открыто, и после этого номер будет использоваться каждый раз Вам нужно приложение.

Прежде всего, получение номера мобильного телефона против политики этики, раньше это было возможно, но теперь, согласно моим исследованиям, для этого нет твердого решения. Используя некоторый код, можно получить номер мобильного телефона, но никакая гарантия не может быть, он будет работать Только в нескольких устройствах. После многих исследований я нашел только три решения, но они не работают на всех устройствах.

Существует следующая причина, по которой мы не получаем.

1. Устройство Android и новая Sim-карта не сохраняют номер мобильного телефона, если номер мобильного телефона недоступен на устройстве и в симу, а затем, как можно получить номер, если какая-либо старая сим-карта, имеющая мобильный номер, затем используя менеджер Telephony, мы можем получить номер другой Мудрый он вернет «нуль» или «» или «??????»

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> TelephonyManager tel= (TelephonyManager)this.getSystemService(Context. TELEPHONY_SERVICE); String PhoneNumber = tel.getLine1Number(); 

Примечание. – Я тестировал это решение в следующих устройствах: Moto x, Samsung Tab 4, Samsung S4, Nexus 5 и Redmi 2, но он не работает каждый раз, когда он возвращает пустую строку, поэтому вывод бесполезен

  1. Этот метод работает только в Redmi 2 prime, но для этого необходимо добавить разрешение чтения в манифесте.

Примечание: – Это также не гарантированное и эффективное решение, я тестировал это решение на многих устройствах, но работал только в Redmi 2 prime, который является двойным сим-устройством, он дает мне два мобильных номера, первый из них правильный, а второй нет Принадлежат моему второму симу, это принадлежит моей старой сим-карте, которую я не использую.

  String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"}; Object object = getContentResolver(). query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"), main_data, "mimetype=?", new String[]{"vnd.android.cursor.item/phone_v2"}, "is_primary DESC"); String s1=""; if (object != null) { do { if (!((Cursor) (object)).moveToNext()) break; // This is the phoneNumber s1 =s1+"---"+ ((Cursor) (object)).getString(4); } while (true); ((Cursor) (object)).close(); } 
  1. В моих исследованиях, которые я нашел ранее, можно было получить номер мобильного телефона с помощью учетной записи WhatsApp, но теперь новая версия Whatsapp не хранит номер мобильного телефона пользователя.

Вывод : – Android не имеет гарантированного решения, чтобы программно получить номер мобильного телефона пользователя.

Предложение : 1. Если вы хотите подтвердить номер мобильного телефона пользователя, попросите пользователя указать его номер, используя otp, вы можете это проверить.

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

Хотя есть возможность иметь несколько учетных записей голосовой почты, при вызове с вашего собственного номера перевозчики направляют вас на голосовую почту. Итак, TelephonyManager.getVoiceMailNumber() или TelephonyManager.getCompleteVoiceMailNumber() , в зависимости от вкуса, который вам нужен.

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

Вот как вы должны делать это сообщение M world:

 private void getPhoneInfo() { if(ContextCompat.checkSelfPermission(getBaseContext(), "android.permission.READ_SMS") == PackageManager.PERMISSION_GRANTED) { TelephonyManager tMgr = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); Log.e(LOGGING_TAG, "PHONE NUMBER = " + tMgr.getLine1Number()); } else { final int REQUEST_CODE_ASK_PERMISSIONS = 123; ActivityCompat.requestPermissions(this, new String[]{"android.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS); } } 

Убедитесь, что вы разрешаете разрешение на использование состояния READ_SMS

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

Во время работы над программным обеспечением безопасности, которое должно было получить номер телефона, которому так когда-либо приходил мой телефон, я должен был это сделать; 1. получите завершение загрузки, а затем попробуйте получить Line1_Number из telephonyManager, который возвращает результат строки. 2. сравните результат String с моим собственным номером телефона, и если они не совпадают или строка возвращает null, то 3. тайно отправьте SMS-сообщение, содержащее результат строки, и специальный знак на мой офисный номер. 4. Если передача сообщения не удалась, запустите службу и продолжайте попытки после каждого часа, пока отправленные сообщения ожидающего подтверждения отправки не будут успешными. С помощью этих шагов я мог получить номер человека, использующего мой потерянный телефон. Не имеет значения, взимается ли человек.