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

Разработка приложения: как звонить, отправлять SMS и получать контакты пользователя

1 831

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

Расширенные функции, такие как дополненная и виртуальная реальность, могут привлекать все заголовки, но звонки и отправка SMS являются одними из наиболее универсальных функций, которые вы можете добавить в свои приложения Android. Например, если в вашем приложении когда-либо отображаются контактные данные, такие как номера телефонов ресторанов, ресторанов, туристических достопримечательностей или магазинов, то есть вероятность, что пользователи действительно захотят использоватьэта информация. По умолчанию пользователь должен скопировать телефонный номер из вашего приложения, переключиться на встроенный номеронабиратель своего смартфона, вставить эту информацию в номеронабиратель, а затем подтвердить, что он хочет позвонить. Это неуклюжий, многоэтапный процесс – не было бы проще, если бы пользователь мог инициировать звонок, просто нажав номер телефона в вашем приложении?

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

Смартфоны упростили возможность связаться с кем-либо, просто нажав его имя в приложении “Контакты” на телефоне, и для наилучшего взаимодействия с пользователем ваше приложение должно обеспечивать аналогичные функции.

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

Звонить

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

Создайте новый проект, используя шаблон «Пустое действие», и создайте простой макет, в котором пользователь может ввести номер телефона в EditText, а затем набрать этот номер одним нажатием кнопки:

<?xml version="1.0" encoding="utf-8"?>

Получение доступа к звонилке

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

  • Намерение ACTION_CALL. Это запускает встроенный номеронабиратель устройства и автоматически набирает указанный номер. Для этого требуется, чтобы у вашего приложения было разрешение CALL_PHONE.
  • Намерение ACTION_DIAL. Это запускает встроенный номеронабиратель устройства с уже загруженным номером, но пользователь должен подтвердить, хочет ли он продолжить вызов. Намерение ACTION_DIAL не требует каких-либо специальных разрешений.

Я собираюсь использовать намерение ACTION_CALL, поэтому вам нужно добавить в свой манифест следующее:

Приложение может совершать звонки и отправлять SMS-сообщения только в том случае, если на устройстве установлено «телефонное» оборудование. Если в вашем приложении есть функции, зависящие от определенного оборудования или программного обеспечения, вам необходимо подумать о том, какой опыт ваше приложение будет предоставлять на устройстве, на котором отсутствует это оборудование или программное обеспечение. Наше приложение представляет собой просто поле EditText и кнопку «Позвонить», поэтому ему нечего предложить устройству, не имеющему телефонного оборудования, например планшету.

Всегда лучше предотвратить установку вашего приложения на устройство, где оно будет неудобно для пользователя, чем рисковать, что кто-то загрузит ваше приложение на несовместимое устройство, получит плохой опыт и оставит вам отрицательный отзыв в Google Play как результат.

Если ваше приложение не может обеспечить хорошее взаимодействие с пользователем без телефонного оборудования, вы должны отметить это оборудование как обязательное, добавив объявление в свой манифест и установив для него значение «true».

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

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

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

Создать намерение ACTION_CALL

В MainActivity нашего проекта нам нужно выполнить следующее:

  • Отправьте запрос на разрешение. В Android 6.0 и выше вам необходимо запрашивать разрешения во время выполнения, поэтому нашему приложению необходимо проверить, есть ли у него разрешение CALL_PHONE, а затем запросить его при необходимости. Всякий раз, когда пользователь отказывает в разрешении, рекомендуется отключить все функции, которые зависят от этого разрешения, но это особенно важно для любого приложения, использующего действие ACTION_CALL. Попытка выполнить ACTION_CALL без разрешения CALL_PHONE приведет к исключению SecurityException, поэтому, как только пользователь откажется от CALL_PHONE, я отключу кнопку «Вызов» приложения.
  • Создайте намерение Intent.ACTION_CALL. Это инициирует вызов номера, полученного с помощью getData().
import

Установите это приложение на физический смартфон или планшет либо на виртуальное устройство Android (AVD). Как только приложение запустится, оно должно запросить разрешение на совершение звонков. Если вы предоставите этот запрос на разрешение, вы сможете инициировать вызовы, введя любой действительный номер телефона в EditText, а затем нажав «Вызов».

Разработка приложения: как звонить, отправлять SMS и получать контакты пользователя

Если вы откажетесь от запроса разрешения, то кнопка будет отключена.

Получение списка контактов

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

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

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

Я собираюсь отобразить эту информацию в виде прокручиваемого списка, к которому пользователь может получить доступ, нажав кнопку «Загрузить контакты». Откройте файл main_activity.xml и добавьте эту кнопку, а также ListView, который в конечном итоге отобразит всю информацию о контактах:

<?xml version="1.0" encoding="utf-8"?>

Затем нам нужно создать макет XML, который определяет структуру для каждой строки в нашем ListView. Этот макет может быть сложным, но я сохраняю простоту, включая один TextView и указав размер текста:

  • Выберите «Создать»> «Файл ресурса макета» на панели инструментов Android Studio.
  • Назовите этот файл “contact_listview.xml” и нажмите “ОК”.
  • Откройте этот файл и добавьте следующее:
<?xml version="1.0" encoding="utf-8"?>

В нашей MainActivity нам нужно выполнить следующее:

  • Запросите разрешение READ_CONTACTS и обработайте ответ.
  • Инициализируйте ArrayAdapter. Данные ListView заполняются с помощью адаптера, который действует как мост между источником данных и ListView.
  • Привяжите наш ListView к адаптеру. Нам нужно установить адаптер, вызвав метод setAdapter () в ListView, а затем передав адаптер. После присоединения адаптера он извлекает контент из источника и преобразует каждый элемент в представление, которое затем вставляется в контейнер ListView.

Android предоставляет класс ContactsContracts, который определяет базу данных контактной информации, хранящуюся в таблице ContactsContract.Data. Мы будем использовать ContactsContracts для доступа к поставщику контактов без необходимости определять наши собственные константы.

import

Установите этот проект на свое Android-устройство. Теперь, когда приложение запускается, оно запрашивает разрешение на доступ к вашим контактам и совершение звонков. Если вы предоставите эти разрешения, вы сможете просматривать все свои контакты, нажав кнопку приложения «Загрузить контакты».

Разработка приложения: как звонить, отправлять SMS и получать контакты пользователя

Если вы отклоните эти запросы на разрешение, кнопки «Позвонить» и «Загрузить контакты» будут отключены.

Отправка текстовых сообщений

В этом последнем разделе я покажу вам, как отправлять SMS-сообщения прямо из вашего приложения, используя класс Android SmsManager.

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

Я собираюсь реализовать эту функцию в отдельном SMSActivity, поэтому давайте начнем с создания нового файла ресурсов макета:

  • Выберите «Файл»> «Создать»> «Файл ресурса макета» на панели инструментов Android Studio.
  • Назовите этот файл “activity_sms.xml”.
  • Откройте новый файл макета и добавьте следующее:
<?xml version="1.0" encoding="utf-8"?>

Это простой пользовательский интерфейс, в котором пользователь может отправлять SMS-сообщения, вводя любой действующий номер мобильного телефона, текст сообщения, а затем нажимая кнопку «Отправить SMS».

Нашему «activity_sms.xml» нужен соответствующий класс Java, поэтому выберите «Файл> Новый> Класс Java» на панели инструментов Android Studio и назовите этот класс «SMSActivity».

Благодаря SmsManager процесс отправки сообщения довольно прост: вам просто нужно использовать getDefault () для получения SmsManager, а затем передать номер телефона и сообщение методу sendTextMessage.

Нам также необходимо проверить, есть ли у нашего приложения в настоящее время доступ к разрешению SEND_SMS, а затем запросить его при необходимости. Еще раз, если пользователь отклоняет запрос разрешения, мы должны отключить все связанные функции, что в данном случае означает отключение кнопки «Отправить SMS».

import

Затем откройте манифест проекта и добавьте разрешение SEND_SMS. Также нам нужно объявить компонент SMSActivity:

<?xml version="1.0" encoding="utf-8"?>

Последняя задача – убедиться, что пользователь может получить доступ к SMSActivity из MainActivity приложения. Откройте файл activity_main.xml вашего проекта и добавьте кнопку «launchSMS»:

<?xml version="1.0" encoding="utf-8"?>

Наконец, реализуйте onClick в MainActivity:

public void launchSMS(View view)

Попробуйте этот проект, установив его на свое устройство Android. Как только вы перейдете к SMSActivity, приложение должно запросить разрешение на просмотр и отправку текстовых сообщений. Если вы предоставите этот запрос на разрешение, вы сможете отправлять SMS-сообщения прямо из пользовательского интерфейса приложения.

Разработка приложения: как звонить, отправлять SMS и получать контакты пользователя

Кроме того, вы можете отслеживать статус отправленных сообщений, используя следующие параметры:

  • sentIntent. Следите за Activity.RESULT_OK, который будет возвращен, если сообщение было успешно отправлено, и поэтому поставлено в очередь для доставки. В случае сбоя сообщения вместо этого вы получите один из следующих кодов результата: RESULT_ERROR_GENERIC_FAILURE, RESULT_ERROR_RADIO_OFF или RESULT_ERROR_NULL_PDU.
  • deliveryIntent. Этот PendingIntent транслируется после того, как получатель получит ваше SMS. Обратите внимание, что DeliveryIntent зависит от перевозчика, предоставляющего DeliveryReport.

Например:

void sendTextMessage (String destinationAddress,
                String scAddress,
                String text,
                PendingIntent sentIntent,
                PendingIntent deliveryIntent)

Вы можете скачать этот полный проект с GitHub.

Подведение итогов

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

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

Какие популярные функции вы регулярно добавляете в свои приложения для Android? Дайте нам знать в комментариях ниже!

Источник записи: https://www.androidauthority.com

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