Intereting Posts
SetBackgroundResource () отбрасывает мои атрибуты макета XML Невозможно отключить производственное приложение в консоли разработчика Google Play в пользу бета-версии Экран клавиатуры закрывает экран вместо того, чтобы выдвигать макет? Удалить системный кеш на android 6.0 Android Places Автозаполнение set lat long bounds Android SQLite выберите * из таблицы, где имя, например,% key%, с помощью подготовленных операторов Android MediaRecorder setOutPutFile () для потока с использованием Socket Как сделать нижнюю границу в выделенной форме XML-селектором? Альтернатива getRunningTasks в Android L Как сделать приложение Facebook новым приложением на Android? Пользовательский интерфейс выбора даты прерывается Удаление верхней панели навигации в режиме Android N Multi-Window Как я могу получить живой просмотр tcpdump из эмулятора Android в Wireshark на OSX? Различные типы разбора Android: значение одного счетчика зависит от значения другого счетчика

GetLine1Number () Возвращает пустой, а не null

Я хочу получить Mobile Number of Device. Я использовал следующую ссылку на код от Alex Volovoy's This Link

TelephonyManager tMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String mPhoneNumber = tMgr.getLine1Number(); Log.d("msg", "Phone : "+mPhoneNumber); 

OUTPUT в Logcat:

Без SIM-карт Возврат телефонов:

 02-01 17:22:45.472: D/msg(29102): Phone : null 

С Simcard:

 02-01 17:22:45.472: D/msg(29102): Phone : 

Я также получил разрешение в <uses-permission android:name="android.permission.READ_PHONE_STATE"/> в AndroidManifest.xml

И что же мне делать? Есть ли ошибка?

Чтобы получить номер телефона с устройства, сначала вы должны установить свой собственный номер телефона на устройстве, только через:

Настройки -> О телефоне -> Состояние -> Мой номер телефона

Телефонные номера на SIM-картах не доступны для всех операторов, например, в Индии. У Sim нет телефонных номеров в любой памяти, поэтому мы не можем получить номер телефона из этого соединения. Однако некоторые страны и операторы сохраняют телефонные номера на SIM-карте, и мы можем их получить. Чтобы это работало для всех устройств, мы можем использовать две стратегии:

Чтобы избежать этой проблемы, мы можем поймать ошибку и работать соответственно. Подобно:

 TelephonyManager tMgr = (TelephonyManager) ShowMyLocation.this.getSystemService(Context.TELEPHONY_SERVICE); String MyPhoneNumber = "0000000000"; try { MyPhoneNumber =tMgr.getLine1Number(); } catch(NullPointerException ex) { } if(MyPhoneNumber.equals("")){ MyPhoneNumber = tMgr.getSubscriberId(); } 

У меня есть другое решение для получения номера телефона, когда диспетчер телефонии возвращается пустым. Надеюсь, это поможет вам.

Вот мой пример кода:

 public static final String main_data[] = { "data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype" }; object object = (TelephonyManager) context.getSystemService("phone"); if (!TextUtils.isEmpty(((TelephonyManager) (object)).getLine1Number())) { } object = context.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; } if (s.equals("vnd.android.cursor.item/phone_v2")) { String s1 = ((Cursor) (object)).getString(4); boolean flag1; if (((Cursor) (object)).getInt(5) > 0) { flag1 = true; } else { flag1 = false; } Toast.makeText(SampleActivity.this, "Phone:-" + s1, Toast.LENGTH_LONG).show(); } } while (true); ((Cursor) (object)).close(); } 

Также не забудьте добавить эти два разрешения:

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