Android phone number что такое

Содержание
  1. Основы Contacts API в Android
  2. Введение
  3. Структура данных
  4. Работаем с контактами
  5. Формат номера телефона — что это и каким бывает?
  6. Что такое формат номера телефона?
  7. Когда и кому нужно знать формат номера телефона?
  8. Как совершать звонки и использовать SMS в Android приложениях
  9. 1. Как совершить звонок
  10. Создание нового проекта в Android Studio
  11. Макет экрана
  12. Измените класс MainActivity
  13. 2. Отслеживание событий телефонного звонка
  14. Добавим разрешение
  15. Создайте объект PhoneStateListener
  16. Состояние прослушивания телефонного звонка
  17. Как использовать эмулятор, звонить и отправлять SMS сообщения
  18. 3. Отслеживание событий телефонного звонка в фоновом режиме
  19. Создание BroadcastReceiver
  20. Изменим AndroidManifest.xml
  21. Отслеживание исходящих звонков
  22. 4. Отправка SMS-сообщений
  23. Настройка макета
  24. Изменение MainActivity
  25. Запуск приложения
  26. 5. Отправка SMS сообщения напрямую
  27. Добавляем разрешения в AndroidManifest.xml
  28. Изменяем класс MainActivity
  29. 6. Получение SMS сообщения
  30. Добавим разрешение
  31. Создание получателя вещания
  32. Заключение
  33. Датчики Android: Близость и Гироскоп
  34. 6 ДА и НЕТ, для достижения отличного пользовательского опыта с Android
  35. Фоновый звук в Android с MediaSessionCompat
  36. Изменение Android приложения под Материальный Дизайн

Основы Contacts API в Android

Введение

Начиная с версии 5 API Android SDK интерфейс работы с контактами изменился, а основной контент провайдер Contacts и все его составляющие получили черную метку @Deprecated. Теперь за работу с контактами отвечает провайдер ContactsContract. Эти изменения связаны с изменением структуры хранения контактов, более адаптированной для Android устройств, которым требуется хранить контакты из множества разных источников и предоставлять их пользователю как единую сущность. Ведь сегодня, определенный контакт на нашем мобильном устройстве это не только имя и номер телефона, мы можем захотеть сохранить eMail, Im, Twitter, Facebook аккаунт определенного человека, и при этом, мы не хотим чтобы у нас нас появилось миллион непонятных записей. Поэтому новый Contacts API позволяет Android агрегировать похожие контакты и представлять их пользователю в одной записи, а также связывать контакт с разного рода данными.

Структура данных

На устройстве основная информация о контактах хранится в трех таблицах, на деле их там конечно больше, но мы рассмотрим основные три: contacts, raw_contacts и data. Чтобы было более наглядно я набросал простую схему в Dia.

В таблице contacts хранятся агрегированные контакты, каждая запись в этой таблице представляет собой пользовательский контакт (единую сущность) – объединение одного или нескольких сырых (необработанных) контактов из таблицы raw_contacts. Как видно на схеме, связь между этими таблицами один ко многим (1-N). Одна запись в таблице raw_contacts представляет собой так называемый сырой контакт. Сырой контакт, на языке Android, означает какой-то конкретный набор данных для определенного контакта. Но сами основные данные в этой таблице не хранятся, они хранятся в таблице data, и связь между raw_contacts и data также один ко многим. В таблице data хранятся непосредственно данные. Причем каждая строка этой таблицы это набор данных определенного типа для контакта. Какого именно типа данные хранятся в строке определяется столбцом mimetype_id, в котором содержится id типов данных определенных в таблице mimetype(например vnd.android.cursor.item/name, vnd.android.cursor.item/photo). Теперь разберемся во всем по подробней и с примерами.

Работаем с контактами

Хорошо, допустим мы хотим добавить контакт (Robert Smith, моб.тел. 11-22-33), как нам это сделать? В таблицу contacts мы сами, явно, не можем добавить контакт, так как система сама формирует эту таблицу агрегируя похожие raw_contacts. Идентичность контактов система определяет в основном по имени (одинаковые имена, фамилии и т.п.), но и по другим критериям, каким именно и как ими управлять можно посмотреть в документации. То есть, если мы добавим raw_contact нашего Роберта (Robert Smith) и свяжем его с данными типа vnd.cursor.android.item/phone, а потом у нас появится “похожий”, для системы, Robert Smith связанный с данными типа vnd.cursor.android.item/email и еще один с данными типа vnd.cursor.android.item/photo, то у нас в контактах будет один Robert Smith с фотографией, мобильным и email’ом.

Теперь попробуем переложить это на код. За таблицы и их поля отвечает, как я уже говорил, класс ContactsContract и его внутренние классы и интерфейсы. Например интерфейсом к таблице raw_contacts является класс ContactsContract.RawContacts, а за таблицу data класс ContactsContract.Data. Будьте внимательны когда изучаете их константы – интерфейсы к столбцам – обращайте внимание на метки read/write и read only.

Из написанного выше следует, что для начала, мы должны добавить сырой контакт, а потом связывать его с данными. Добавить пустой контакт можно так:

В контактах у вас должен появиться пустой (Unknown) контакт, ни с чем не связанный. Добавим ему имя. Чтобы это сделать, мы должны связать наш новый контакт с новыми данными используя его id, который можно достать из прошлого запроса. Основные интерфейсы к полям таблицы данных содержаться в классе-контейнере ContactsContract.CommonDataKinds и его внутренних классах и интерфейсах. Например, сейчас нам понадобиться
класс ContactsContract.CommonDataKinds.StrucruredName содержащий нужные нам константы для добавления имени, а также константу MIME типа, которой мы пометим наше поле в таблице данных.

Читайте также:  Как переключить канал с андроида

Если мы добавим контакт таким образом, то в списке контактов у нас появиться Robert Smith. Теперь идем дальше, добавим нашему контакту еще и телефон. Для этого нам понадобиться класс ContactsContract.CommonDataKinds.Phone, который является интерфейсом к данным телефонного номера.

Теперь в контактах у нас есть Robert Smith которому можно позвонить. Но вот так добавлять контакт и данные к нему, в несколько запросов, дорого и накладно. Поэтому существует класс ContentProviderOperation, который позволяет построить запрос, который выполнит все наши операции за одну транзакцию. Именно им и рекомендуют пользоваться. Вот так можно добавить нашего Роберта используя ContentProviderOperation.

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

В остальном все другие операции выполняются обычным образом, используя те провайдеры, которые вам необходимы, с некоторыми оговорками. Например, удаление контакта из таблицы contacts удалит все raw_contacts с ним связанные и т.д.

Вот так можно попробовать найти нашего Роберта в контактах:

На этом хотелось бы завершить статью, все же это были только основные сведения о Contacts API в Andoid. Я надеюсь мне удалось описать здесь основные принципы, а вся конкретика зависит от того, что вам необходимо сделать в процессе работы. Можно просто руководствоваться этими принципами и находить в официальной документации интерфейсы которые вам нужны для работы. Успехов!

Источник

Формат номера телефона — что это и каким бывает?

Почему важно сохранять номера в телефоне в правильном формате?

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

Что такое формат номера телефона?

Формат номера телефона — правильный вид номера телефона, единый для всех абонентов. Российский номер состоит из нескольких частей:

  • Префикс +7 (8).
    • +7 — международный формат префикса России, который используется для звонков за рубежом.
    • Код 8 обычно применяется во время звонков внутри страны.
  • Код города или код оператора, состоящий из трех цифр.
  • Номер абонента, состоящий из семи цифр.

Вводя все эти составляющие по порядку, начиная с +7, абонент максимально увеличивает шансы дозвониться по нужному номеру. Префикс +7 означает, что номер записан в международном формате номера телефона. В то же время, «восьмерка» не является ошибкой, однако международный звонок с таким кодом совершить не удастся.

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

Остальные цифры индивидуальны и принадлежат мобильному или городскому номеру абонента. В совокупности, российский формат номера телефона состоит из 11 цифр, а начинать номера рекомендуется с префикса +7, особенно если звонок предстоит международный.

Когда и кому нужно знать формат номера телефона?

Верный формат номера телефона — гарантия того, что звонок или SMS-сообщение найдет своего получателя. Особенно важно вводить правильный формат номера телефона в следующих случаях:

  • Во время звонков в Россию из-за рубежа. Из-за неправильного префикса можно не дозвониться домой. Только префикс +7 позволяет совершить международный звонок в РФ из других стран.
  • Во время сбора данных клиентов. На большинстве сайтов во время регистрации присутствует форма для ввода номера телефона клиента. Если компании заранее не оптимизирует форму под правильный формат номера телефона, далеко не все зарегистрированные верно введут свой номер. Из-за этого и обратная связь с клиентами может быть невозможна.
  • Во время регистрации на сервисах или при оформлении заказа. Обратная ситуация может случиться и с самими пользователями. Например, делая заказ, клиент ввел свой номер для обратной связи в неправильном формате. Если на сайте отсутствует подтверждение SMS-сообщением, компания не сможет связаться с пользователем по его номеру телефона.
  • Для определения номера необходимо знать его формат, включая код оператора. Без этих данных определить звонящего не получится.
Читайте также:  The elder scrolls legend андроид

Конечно, ошибки в формате номера телефона могут быть незначительными и не помешают позвонить или написать SMS пользователю. Например, написать префикс без знака «+» или поставить скобки возле кода оператора можно. Но, если забыть о коде оператора/города совсем или ввести слишком длинный или слишком короткий номер, звонки на него будут недоступны.

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

+7 (YYY) XXX XX XX

где YYY — код города или оператора, а XXX XX XX — номер абонента.

Источник

Как совершать звонки и использовать SMS в Android приложениях

Russian (Pусский) translation by Ellen Nelson (you can also view the original English article)

Из этого урока вы узнаете об Android Telephony и SMS API. Вы узнаете, как сделать звонок из вашего приложения и как отслеживать события телефонного звонок, а также как отправлять и получать SMS сообщения.

1. Как совершить звонок

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

Создание нового проекта в Android Studio

Запустите Android Studio и создайте новый проект с пустым активити под названием MainActivity .

Макет экрана

На данный момент, наш макет будет иметь только поля EditText и кнопку Вызова:

Измените класс MainActivity

В блоке кода ниже, создадим ACTION_DIAL , для отображения номеронабирателя. Номер телефона передается из tel от URI схемы: tel:XXXXXXXX . Обратите внимание, что вам не нужны разрешения для этой работы:

Если вы запустите приложение и нажмёте кнопку набора (dial), вы увидите номеронабиратель и там вы должны набрать номер. Вы можете изменить это, чтобы на самом деле совершить звонок из вашего приложения, просто заменив назначение ACTION_DIAL на ACTION_CALL . Однако, это потребует разрешение android.permission.CALL_PHONE .

2. Отслеживание событий телефонного звонка

В этом разделе мы собираемся узнать, как отслеживать события телефонного звонка в системе Android. Телефон может находиться в трех состояниях:

  1. простоя (когда он не используется)
  2. звонка (когда есть входящий звонок)
  3. снято (когда отвечаете на звонок)

Добавим разрешение

Нам нужно разрешение READ_PHONE_STATE , чтобы иметь возможность отслеживать состояние телефона. Добавим его в AndroidManifest.xml:

Создайте объект PhoneStateListener

Мы создаем объект класса PhoneStateListener и затем переопределим его метод onCallStateChanged() (в IntelliJ, это легко сделать это с помощью Control-O, а затем выберите или поищите метод). Мы будем обрабатывать изменения состояния звонка, отображая Toast . Обратите внимание, что мы также можем получить доступ к номеру телефона входящего звонка, когда срабатывает этот метод:

В зависимости от потребностей вашего приложения, можно также переопределить один из этих методов событий: onCellInfoChanged() , onCallForwardingIndicatorChanged() , onCellLocationChanged() или onSignalStrengthChanged() .

Состояние прослушивания телефонного звонка

Чтобы начать прослушивание телефонного звонка, нам нужно получить TelephonyManager от системной службы и инициализировать его в onCreate() .

В методе onResume() мы можем начать слушать с помощью метода listen() TelephonyManager , передавая ему экземпляр PhoneStateListener и статическую LISTEN_CALL_STATE . Мы останавливаем прослушивание методом onStop() , передавая LISTEN_NONE в качестве второго аргумента для listen() .

Другие возможные варианты прослушивания телефона LISTEN_CELL_LOCATION , LISTEN_SIGNAL_STRENGTH , LISTEN_CALL_FORWARDING_INDICATOR и LISTEN_CELL_INFO .

Итак, запустите приложение и убедитесь, что приходит входящий звонок.

Отслеживание будет работать только, когда приложение активно. Чтобы заставить работать его в фоновом режиме (когда наше приложение не запущено), нам нужно будет создать BroadcastReceiver , так что даже если приложение не запущено, мы все еще можем отслеживать состояние телефонного звонка. В зависимости от требований приложения, это может быть лучшим способом получать изменения состояния звонка. Я покажу вам, как сделать это в следующем разделе.

Имейте в виду, что мы отслеживаем только входящие звонки. Для отслеживания исходящих звонков, нам потребуются дополнительные разрешения. Чтобы отслеживать исходящие звонки, добавьте следующую строку в ваш файл AndroidManifest.xml.

Как использовать эмулятор, звонить и отправлять SMS сообщения

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

3. Отслеживание событий телефонного звонка в фоновом режиме

Создание BroadcastReceiver

Так же, как и в предыдущем разделе, нам нужно создать прослушиватель событий для отслеживания изменений состояний телефона. Основным отличием в том, что на этот раз мы будем расширять базовый класс BroadcastReceiver , чтобы мы могли получить состояние прослушивания телефонного звонка, даже если приложение не запущено. Убедитесь, что зарегистрировали слушателя не более одного раза! Наша проверка для этого находится в строке 36.

Читайте также:  Андроид для акура мдх

Изменим AndroidManifest.xml

BroadcastReceiver работает, только если он зарегистрирован. Нам нужно рассказать системе Android о нашем BroadcastReceiver, зарегистрировав его в файле AndroidManifest.xml, подключив наш класс PhoneCallStateReceiver к описывающий системе вещания, что, в данном случае, мы хотим получить — PHONE_STATE .

Отслеживание исходящих звонков

Для исходящих звонков, вам нужно включить действие NEW_OUTGOING_CALL в в приемник в AndroidManifest.xml.

Чтобы получить номер телефона исходящего звонка, в методе onReceive(Context, Intent) , мы получаем номер как экстра. Для предотвращения вызова, мы можем вызвать setResultData() и передать ему аргумент null. ResultData используется в качестве фактического номера для вызова.

Вы можете узнать больше о трансляции и broadcast receivers в нашем учебнике здесь на Envato Tuts+:

4. Отправка SMS-сообщений

У вас есть только два основных варианта для отправки SMS: использование SMS приложение вашего устройства или в обход его, отправив SMS прямо из вашего приложения. Мы посмотрим оба сценария, и вы можете решить, какой из них лучше использовать в вашем случае. Давайте начнем с отправки SMS с помощью приложения SMS вашего устройства.

Настройка макета

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

Изменение MainActivity

Внутри метода onCreate() в классе MainActivity , задайте ACTION_SENDTO как первый аргумент и smsto:

в качестве второго аргумента. Текстовое сообщение будет значением экстра sms_body :

Тут. SMS клиент будет отслеживать статус доставки сообдения.

Запуск приложения

Когда заполнены все необходимые поля, нажатие на кнопку Отправка SMS, откроет SMS клиента или даст пользователю выбрать приложение, если оно уже не выбрано.

5. Отправка SMS сообщения напрямую

Далее, давайте посмотрим, как отправить SMS напрямую из нашего приложения, вместо использования SMS клиента.

Добавляем разрешения в AndroidManifest.xml

Как обычно, нам нужно зарегистрировать разрешение в AndroidManifest.xml.

Изменяем класс MainActivity

Далее, для Android 6.0 (API уровня 23) и выше, нужно запросить разрешение SEND_SMS во время выполнения.

Чтобы у знать больше об выполнении Android разрешений и как они изменились к версии 6.0, посмотрите наш урок на Envato Tuts+:

Для отправки SMS, мы получаем экземпляр SMSManager по умолчанию, а затем вызвать его метод sendTextMessage() , передавая туда телефонный номер в качестве первого аргумента, и сообщение в качестве второго аргумента:

Для отслеживания статуса доставки, метод sendTextMessage() SMSManager имеет два варианта параметров PendingIntent : sentIntent и deliveryIntent .

Если вы хотите использовать sentIntent , смотрите результат кода Activity.RESULT_OK на успешное выполнение, или один из RESULT_ERROR_GENERIC_FAILURE , RESULT_ERROR_RADIO_OFF и RESULT_ERROR_NULL_PDU для указания ошибки.

6. Получение SMS сообщения

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

Добавим разрешение

Добавим разрешение RECEIVE_SMS в AndroidManifest.xml:

Далее нам нужно проверить и посмотреть, имеет ли приложение разрешение на получение SMS-сообщений во время выполнения. Поэтому в классе MainActivity , сделаем проверку на разрешение RECEIVE_SMS . Если его нет, его нужно запросить.

Создание получателя вещания

Мы извлекаем каждый объект из класса SmsMessage , используя метод createFromPdu(byte[] pdu) , передавая его PDU (блок данных протокола). Затем мы добавляем это в массив наших сообщений.

Для поддержки API 23 и выше, вы должны включить формат дополнительной строки (либо «3gpp» для GSM/UMTS/LTE сообщений в формате 3GPP или «3gpp2» для CDMA/LTE сообщений в формат 3GPP2).

Теперь запустите приложение, закройте его и отправьте SMS с эмулятора телефона.

Заключение

В этом уроке вы узнали о том, как:

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

Есть гораздо больше того, что вы можете сделать с телефонными звонками и SMS сообщениями в Android. Посмотрите документацию по API Телефонии Android и API SMSManager, чтобы узнать больше.

В то же время, проверьте другие наши записи по разработке на Android!

Датчики Android: Близость и Гироскоп

6 ДА и НЕТ, для достижения отличного пользовательского опыта с Android

Фоновый звук в Android с MediaSessionCompat

Изменение Android приложения под Материальный Дизайн

Источник

Оцените статью