2013-09-19 3 views
39

Как я могу получить свой номер телефона в Android? Когда я использую:Получите мой номер телефона в android

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

и использование:

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

возвращает нуль, то почему?

+0

возможно дубликат [Программным получить номер телефона Android телефона] (http://stackoverflow.com/questions/2480288/programmatically-obtain-the-phone-number-of-the-android-phone) – bluish

ответ

21

От documentation:

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

Итак, вы все сделали правильно, но нет номера телефона.

Если вы получаете null, вы можете отобразить что-то, чтобы пользователь мог ввести номер телефона самостоятельно.

+1

ok Я прочитал документацию перед тем, как задать вопрос Но что я делаю сейчас –

+0

Я отредактировал свой ответ. – keyboardsurfer

+0

ok , но это не эффективный способ –

11

Если вызываемая вами функция возвращает null, это означает, что ваш номер телефона не зарегистрирован в вашем списке контактов.

Если вместо номера телефона нужно просто уникальный номер, вы можете использовать серийный номер SIM-карты:

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

благодарит за вас Ram –

+1

А чем вы занимаетесь? Есть ли способ получить номер телефона с использованием серийного номера SIM-карты? – Pere

+0

Что значит «Телефон нет на вашем мобильном телефоне»? Как зарегистрировать номер телефона на мобильном телефоне? пожалуйста, объясни. –

2
private String getMyPhoneNumber(){ 
    TelephonyManager mTelephonyMgr; 
    mTelephonyMgr = (TelephonyManager) 
     getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number(); 
} 

private String getMy10DigitPhoneNumber(){ 
    String s = getMyPhoneNumber(); 
    return s.substring(2); 
} 
+0

спасибо Robi Kumar Tomer –

+0

@mohammad rababah, всегда очень приветствуется. –

+0

В чем разница? Ответ на этот вопрос и вопрос? – chhameed

9

Как Answered here

Использование ниже код:

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 шага как одноразовую активность во время первого запуска приложения. Позже, когда требуется номер телефона, используйте значение, доступное в общих предпочтениях.

0

Метод 1:

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

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

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

Метод 2:

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

Try ниже код:

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; 
     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" /> 

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

+0

Не могли бы вы объяснить код в методе-2? – not2qubit

0

Robi Code работает для меня, просто положите, если! Null, так что если номер телефона равен нулю, пользователь может заполнить номер телефона самим.

editTextPhoneNumber = (EditText) findViewById(R.id.editTextPhoneNumber); 
TelephonyManager tMgr; 
tMgr= (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
String mPhoneNumber = tMgr.getLine1Number(); 
if (mPhoneNumber != null){ 
editTextPhoneNumber.setText(mPhoneNumber); 
} 
Смежные вопросы