Чтение смс android studio

Отправка и получение SMS сообщений в Android

Как это ни удивительно, SMS сообщений сегодня остаются одним из самых востребованных сервисов, что вполне объясняет интерес, проявляемый Android разработчики к этой тема. Из данного урока Вы узнаете, как программно отправлять и получать SMS сообщения. Будет показано, как провести тестирование приложения на эмуляторе.

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

Создайте в Eclipse новый проект со следующими параметрами:

  • Project Name: SMSMessaging
  • Package name: net.learn2develop.SMSMessaging
  • Activity Name: SMS
  • Application Name: SMS App

Для того, чтобы наше прилоение могло работать с SMS, ему необходимо дать соответствующие разрешения: SEND_SMS для отправки и RECEIVE_SMS — для получения. Откройте файл AndroidManifest.xml и приведите его к виду:

Настроим шаблон дизайна приложения. Откройте файл res/layout/main.xml и приведите его к виду

В результате у Вас должен получиться следующий шаблон:

Перейдем к редактированию кода. В SMS activity напишем обработчик нажатия на кнопку. После щелчка мы должны проверить введен ли номер телефона и текстовое сообщение. Если все в порядке, мы вызываем функцию sendSMS(), которая отправляет сообщение.

Напишем реализацию функции sendSMS()

Для отправки SMS сообщения в Android используется класс SmsManager. в отличии от друих классов, мы не можем получить экземпляр SmsManager напрямую. Для решения этой задачи необходимо вызвать статический метод getDefault(), который возвращает требуемый объект класса SmsManager. Метод sendTextMessage() отправляет sms сообщение с помощью PendingIntent. Объект PendingIntent используется для определения activity, которая будет вызвана после отправки сообщения. В приведенном выше коде объект pi ссылается на ту же activity из которой он вызывается, то есть после отправки SMS сообщения activity не поменяется.

Если Вы хотите отслеживать состояние процесса отправки сообщения, вам понадобится два объекта PendingIntent и два объекта BroadcastReceiver

В приведенном выше листинге объект sentPI используется для отслеживания процесса отправки. Когда SMS сообщение отправлено, генерируется первое событие onReceive для BroadcastReceiver. Именно здесь можно проверить статус процесса отправки. Объект PendingIntent (deliveredPI) используется для мониторинга доставки. Когда сообщение успешно доставлено, генерируется еще одно событие onReceive для BroadcastReceiver.

Теперь можно провести тесстирование приложения. При отладке на компьютере можно посылать сообщения от одного эмулятора другому. Для этого просто запустите два эмулятора (в папке android SDK зайдите в каталог Tools Emulator.exe). В качестве номера, куда вы отправляете SMS, нужно указать номер порта эмулятора. Его можно увидеть в загаловке окна эмулятора в круглых скобках. На рисунке показан пример отправки сообщения с эмултора 5554 на эмулятор 5556.

После успешной отправки SMS пользователю будет показано сообщение «SMS sent». После того, как сообщение будет принято на другом устройстве, пользователь увидит «SMS delivered». К сожалению, в случае тестирования на эмуляторе Вы не увидите этого сообщения. Возможность проверять успешность доставки доступна только на реальных устройствах.

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

Получение SMS сообщений в Android

Помимо отправки SMS вы также можете организовать перехват входящих SMS сообщений. Делается это с помощью все того же объекта BroadcastReceiver.

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

Теперь нужно добавить в проект новый класс SmsReceiver.java, который является наследником BroadcastReceiver. Внутри SmsReceiver нужно написать собственную реализацию метода onReceive()

Читайте также:  Аналог лаки патчер для андроид

При получении SMS сообщения вызывается метод onReceive. SMS сообщение упаковывается и присоединяется к объекту intent (второй параметр метода onReceive). SMS сохраняется в массиве Object в PDU формате. Чтобы распаковать SMS сообщение нужно воспользоваться методом createFromPdu() класса SmsMessage. После этого можно отобразить сообщения с помощью класса Toast

Вот, собственно, и все! Можете запускать эмуляторы и тестировать приложение. На приведенном ниже рисунке с помощью класса Toast показано полученное сообщение.

Заключение

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

Исходный код примера можно скачатьздесь.

Источник

Чтение смс android studio

Такая штука, как голосовые сообщения, голосовая почта, управление поиском с помощью голоса, известны уже довольно давно. Но, не взирая на это, использование подобных инструментов еще не стало реально широко используемым. И сегодня мы возьмемся за исправление этого упущения – создадим приложение, которое будет читать вслух входящие сообщения. Согласитесь, звучит довольно интересно. Итак, попробуем воплотить идею в жизнь с помощью Android Studio.

Создаем новый проект, минимальную версию Android выставляем 2.3. Создаем пустую активность Empty Activity.

Нашему будущему приложению нужно получить 3 разрешения в файле манифеста:

RECEIVE_SMS – для приема смс сообщений;

READ_SMS – для чтения смс сообщений;

READ_CONTACTS – для отображения имени того, чье сообщение пришло.

Добавим в AndroidManifest.xml следующие строки:

Наше приложение будет иметь только портретную ориентацию, поэтому объявим об этом в теге :

На этом работа с файлом AndroidManifest . xml закончена.

Теперь отредактируем файл strings.xml, добавив туда следующие строки:

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

TextView — для отображения имени того, чья последняя смс-ка к нам прилетела;

TextView — для отображения содержимого последней смс;

ToggleButton — переключатель для включения и выключения чтения сообщений.

После добавления необходимых элементов наш layout файл имеет вид:

Теперь создадим новый класс для настройки нашего говоруна. Создаем новый java класс Speaker.java. Он будет использоваться для того, чтобы избежать запуска TTS API вместе с основным Activity. Этот класс будет осуществлять OnInitListener интерфейс, который будет сообщать, что TTS готов к использованию. Мы запишем этот показатель готовности к работе как логическую переменную с именем ready. Также зададим еще одну логическую переменную allowed, которая принимает значение true когда пользователь разрешил TTS проговаривать сообщения. Также мы создадим методы для получения и настройки значений этих переменных. Итак, если все сказанное ввести в наш класс, он примет вот такой вид:

Интерфейс OnInitListener имеет всего один метод – onInit. Этот метод выполняется когда TTS инициализирован. Параметр Status позволяет нам узнать, как прошла инициализация. Когда подтверждается, что инициализация прошла успешно, мы должны настроить нужный язык для работы TTS. Поэтому добавляем этот метод:

Далее мы добавляем метод speak, который и будет читать сообщения, когда это возможно. Перед тем, как начать чтение, метод проверяет значения введенных нами переменных allowed и ready, имеют ли они значение true. Генерируемая речь размещается в потоковом уведомлении:

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

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

Теперь отредактируем файл MainActivity.java. Нам нужно объявить здесь о созданных в layout элементах (TextView и ToggleView), объявить две целых величины LONG_DURATION и SHORT_DURATION, они будут использоваться в методе pause класса Speaker.java. Также объявляем целую величину CHECK_CODE, ее значение не важно, она будет использоваться в методе startActivityforResult для определения результата. Также объявляем объекты Speaker и BroadcastReceiver. На данный момент MainActivity . java имеет вид:

Читайте также:  Сколько озу нужно для андроид

Добавим метод, который будет проверять, установлен ли на устройстве TTS. Проверка выполняется использованием результата из класса Speaker . java .

Когда результат из startActivityForResult получен, вызывается метод onActivityResult. В этом методе, если мы получаем положительный результат проверки, мы инициализируем объект Speaker, если результат отрицательный — предлагаем пользователю установить TTS.

Теперь, чтобы установить связь с входящими сообщениями, создаем объект BroadcastReceiver. Каждый раз, когда приходит новое сообщение, вызывается метод onReceive этого объекта. Далее, используя класс SmsMessage, выполняется анализ сообщения. После этого, мы используем методы getDisplayMessageBody и getOriginatingAddress для извлечения из проведенного анализа нужной нам информации.

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

Из входящего смс мы можем извлечь только номер отправителя, для того, чтобы узнать его имя, нужно установить связь нашего приложения с контактами устройства. С помощью следующего метода мы запрашиваем данные контактов. Если имени отправителя не будет в телефонной книге, то мы просто назначаем такому отправителю имя unknown number:

Перед использованием BroadcastReceiver его нужно зарегистрировать. Создаем фильтр для входящих текстовых сообщений IntentFilter и регистрируем smsReceiver:

Пришло время поработать над методом onCreate. Здесь мы инициализируем все объявленные объекты. Также инициализируем toggleListener для настройки значения allowed из класса Speaker.java.

После инициализации вызываем методы checkTTS, initializeSMSReceiver, registerSMSReceiver:

Ну и под конец, используем метод onDestroy для отключения нашего TTS, чтобы он не занимал попусту ресурсы, когда мы его не используем:

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

Также предлагаю ознакомиться с уроком по реализации преобразования голоса в текст. Удачи!

Источник

2.2: Part 2 — Sending and Receiving SMS Messages

Contents:

Task 3. Receive SMS messages with a broadcast receiver

To receive SMS messages, use the onReceive() method of the BroadcastReceiver class. The Android framework sends out system broadcasts of events such as receiving an SMS message, containing intents that are meant to be received using a BroadcastReceiver. You need to add the RECEIVE_SMS permission to your app’s AndroidManifest.xml file.

3.1 Add permission and create a broadcast receiver

To add RECEIVE_SMS permission and create a broadcast receiver, follow these steps:

Open the AndroidManifest.xml file and add the android.permission.RECEIVE_SMS permission below the other permission for SMS use:

Receiving an SMS message is permission-protected. Your app can’t receive SMS messages without the RECEIVE_SMS permission line in AndroidManifest.xml.

Name the class «MySmsReceiver» and make sure «Exported» and «Enabled» are checked.

The «Exported» option allows your app to respond to outside broadcasts, while «Enabled» allows it to be instantiated by the system.

  • Open the AndroidManifest.xml file again. Note that Android Studio automatically generates a tag with your chosen options as attributes:
  • 3.2 Register the broadcast receiver

    In order to receive any broadcasts, you must register for specific broadcast intents. In the Intent documentation, under «Standard Broadcast Actions», you can find some of the common broadcast intents sent by the system. In this app, you use the android.provider.Telephony.SMS_RECEIVED intent.

    Читайте также:  Андроид сообщение не отправлено что делать

    Add the following inside the tags to register your receiver:

    3.3 Implement the onReceive() method

    Once the BroadcastReceiver intercepts a broadcast for which it is registered ( SMS_RECEIVED ), the intent is delivered to the receiver’s onReceive() method, along with the context in which the receiver is running.

    1. Open MySmsReceiver and add under the class declaration a string constant TAG for log messages and a string constant pdu_type for identifying PDUs in a bundle:
    2. Delete the default implementation inside the supplied onReceive() method.

    In the blank onReceive() method:

    Add the @TargetAPI annotation for the method, because it performs a different action depending on the build version.

    Retrieve a map of extended data from the intent to a bundle .

    Define the msgs array and strMessage string.

    Get the format for the message from the bundle .

    As you enter SmsMessage[] , Android Studio automatically imports android.telephony.SmsMessage .

    Initialize the msgs array, and use its length in the for loop:

    Use createFromPdu(byte[] pdu, String format) to fill the msgs array for Android version 6.0 (Marshmallow) and newer versions. For earlier versions of Android, use the deprecated signature createFromPdu(byte[] pdu).

    Build the strMessage to show in a toast message:

    Get the originating address using the getOriginatingAddress() method.

    Get the message body using the getMessageBody() method.

    Add an ending character for an end-of-line.

  • Log the resulting strMessage and display a toast with it:
  • The complete onReceive() method is shown below:

    3.4 Run the app and send a message

    Run the app on a device. If possible, have someone send you an SMS message from a different device.

    You can also receive an SMS text message when testing on an emulator. Follow these steps:

      Run the app on an emulator.

    Click the (More) icon at the bottom of the emulator’s toolbar on the right side, as shown in the figure below:

  • The extended controls for the emulator appear. Click Phone in the left column to see the extended phone controls:
  • You can now enter a message (or use the default «marshmallows» message) and click Send Message to have the emulator send an SMS message to itself.
  • The emulator responds with a notification about receiving an SMS message. The app should also display a toast message showing the message and its originating address, as shown below:
  • Solution Code

    Android Studio project: SmsMessaging

    Coding challenge

    Challenge: Create a simple app with one button, Choose Picture and Send, that enables the user to select an image from the Gallery and send it as a Multimedia Messaging Service (MMS) message. After tapping the button, a choice of apps may appear, including the Messenger app. The user can select the Messenger app, and select an existing conversation or create a new conversation, and then send the image as a message.

    The following are hints:

    • To access and share an image from the Gallery, you need the following permission in the AndroidManifest.xml file:
    • To enable the above permission, follow the model shown previously in this chapter to check for the READ_EXTERNAL_STORAGE permission, and request permission if necessary.
    • Use the following intent for picking an image:
    • Override the onActivityResult method to retrieve the intent result, and use getData() to get the Uri of the image in the result:
    • Set the image’s Uri, and use an intent with ACTION_SEND , putExtra() , and setType() :
    • Android Studio emulators can’t pass MMS messages to and from each other. You must test this app on real Android devices.
    • For more information about sending multimedia messages, see Sending MMS with Android.

    Android Studio project: MMSChallenge

    Источник

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