Программно получить номер телефона телефона Android - PullRequest
415 голосов
/ 19 марта 2010

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

Ответы [ 15 ]

3 голосов
/ 19 января 2017

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

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

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

<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 prime, но оно работает не каждый раз он возвращает пустую строку, так что вывод бесполезен

  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 устройства.
3 голосов
/ 07 января 2014

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

1 голос
/ 06 июля 2018

Небольшой вклад. В моем случае код запускает исключение ошибки. Мне нужно было поместить аннотацию для запуска кода и решить эту проблему. Здесь я позволю этот код.

public static String getLineNumberPhone(Context scenario) {
    TelephonyManager tMgr = (TelephonyManager) scenario.getSystemService(Context.TELEPHONY_SERVICE);
    @SuppressLint("MissingPermission") String mPhoneNumber = tMgr.getLine1Number();
    return mPhoneNumber;
}
0 голосов
/ 21 декабря 2016

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

0 голосов
/ 06 июня 2011

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

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

...