Подтвердить что ты не робот

Как получить текущий номер SIM-карты в Android?

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

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
        String n = tm.getLine1Number();

Разрешение:

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

Обязательно ли сохранять номер в мобильном телефоне Android settings --> about phone --> status --> myphone number

Любая идея по этому поводу?

4b9b3361

Ответ 1

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

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

И добавьте разрешение ниже в ваш Androidmanifest.xml файл.

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

Сообщите мне, есть ли какие-либо проблемы.

Ответ 2

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

=============================================== ==================================

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

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

Разрешение:

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

код:

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

ArrayList<String> googleAccounts = new ArrayList<String>();
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, но его стоит попробовать в любом случае. И помните, что вы всегда должны запрашивать у пользователя подтверждение.

Ответ 3

Получение номера телефона, IMEI и SIM-карты

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

Для SIM-карты используйте getSimSerialNumber()

    //---get the SIM card ID---
    String simID = tm.getSimSerialNumber();
    if (simID != null)
        Toast.makeText(this, "SIM card ID: " + simID, 
        Toast.LENGTH_LONG).show();

Телефонный номер телефона, используйте getLine1Number() (какое-то устройство не вернет номер телефона)

    //---get the phone number---
    String telNumber = tm.getLine1Number();
    if (telNumber != null)        
        Toast.makeText(this, "Phone number: " + telNumber, 
        Toast.LENGTH_LONG).show();

IMEI номер телефона, используйте getDeviceId()

    //---get the IMEI number---
    String IMEI = tm.getDeviceId();
    if (IMEI != null)        
        Toast.makeText(this, "IMEI number: " + IMEI, 
        Toast.LENGTH_LONG).show();

Необходимые разрешения

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

Ответ 4

У вас все правильно, но проблема заключается в функции getLine1Number().

getLine1Number() - этот метод возвращает строку номера телефона для строки 1, то есть MSISDN для телефона GSM. Возвращает null, если он недоступен.

этот метод работает только для нескольких сотовых телефонов, но не для всех телефонов.

Итак, если вам нужно выполнить операции в соответствии с симом (кроме вызова), тогда вы должны использовать getSimSerialNumber(). Он всегда уникальный, действительный, и он всегда существует.

Ответ 5

Требуется разрешение READ_PHONE_STATE.

TelephonyManager telMgr =
    (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);

    String deviceID = telMgr.getDeviceId();
    String simSerialNumber = telMgr.getSimSerialNumber(); 
String simLineNumber = telMgr.getLine1Number(); 

Ответ 6

Вы можете использовать TelephonyManager для этого:

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

Используете ли вы

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