- Отправка и получение SMS сообщений в Android
- Отправка SMS сообщений в Android
- Получение SMS сообщений в Android
- Заключение
- программирование под Android
- середа, 8 серпня 2012 р.
- Учимся отправлять смс
- 2 коментарі:
- 2.2: Part 2 — Sending and Receiving SMS Messages
- Task 3. Receive SMS messages with a broadcast receiver
- 3.1 Add permission and create a broadcast receiver
- 3.2 Register the broadcast receiver
- 3.3 Implement the onReceive() method
- 3.4 Run the app and send a message
- Solution Code
- Coding challenge
- Android — отправка смс
- пример
- Использование встроенного намерения для отправки SMS
- Intent Object — Действие для отправки SMS
- Intent Object — Данные / Тип для отправки SMS
- Intent Object — Дополнительно для отправки SMS
- пример
Отправка и получение 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
середа, 8 серпня 2012 р.
Учимся отправлять смс
Введение
Всем привет! Сегодня будем учиться отправлять смс. Научимся так же отправлять смс «пачками», отслеживать доставку.
Отправка sms
Передача смс осуществлятся при помощи объекта SmsManager:
получили ссылку на системный SmsManager. Так же стоит обновить манифест:
Далее следует прописать номер поулчателя (запустите ещё один эмулятор) и тело сообщения:
и непосредственно с помощу нашего менеджера отправляем смс:
метод sendTextMessage отправляет текстовое сообщение, в него мы передаём номер получателя и тело сообщения, остальные поля пока что не трогаем. Всё, можете отправлять.
Что бы отследить подтверждение о доставке необходимо зарегистрировать два слушателя. Первый слушатель будет срабатывать когда смс будет отправляться, второе сработает тогда когда получатель получил смс. Лучше всего для наглядности переопределить слушатели:
Собственно наверное немножко не понятно, BroadcasReceiver и PendingIntent своеобразные «мосты». BroadcasReceiver слушатель который слушает что получает PendingIntent на всём телефоне, а не только в вашем приложении.
Так же стоит отметить что стоит переопределить метод onStop() главного активити:
Далее можете отправить сообщение и посмотреть за результатами.
2 коментарі:
ссылки для скачивания недоступны. Немного неверен код для отправки длинных СМС.
Во-первых, проверять сообщение на длину в 160 символов имеет смысл только для СМС, написанных латиницей. Для СМС, написанных кириллицей, максимальная длина 70 символов. Условие лучше убрать вообще — код будет работать одинаково хорошо как для длинных, так и для коротких СМС.
Во-вторых не используется ресивер подтверждения отправки и в-третьих забыта фигурная скобка 🙂
Правильный код привожу ниже:
String SENT = «SMS_SENT»;
String DELIVERED = «SMS_DELIVERED»;
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
registerReceiver(deliveryBroadcastReciever, new IntentFilter(DELIVERED));
Источник
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.
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.
- 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:
- 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.
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:
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
Источник
Android — отправка смс
В Android вы можете использовать API-интерфейс SmsManager или встроенное приложение SMS для отправки SMS. В этом уроке мы покажем вам два основных примера отправки SMS-сообщения:
Конечно, обоим нужно разрешение SEND_SMS .
Помимо описанного выше метода, в классе SmsManager есть еще несколько важных функций. Эти методы перечислены ниже —
Sr.No. | Метод и описание | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
шаг | Описание |
---|---|
1 | Вы будете использовать Android Studio IDE для создания приложения Android и назовите его как tutorialspoint в пакете com.example.tutorialspoint . |
2 | Измените файл src / MainActivity.java и добавьте необходимый код для отправки смс. |
3 | Измените XML-файл макета. Res / layout / activity_main.xml добавьте любой компонент GUI, если это необходимо. Я добавляю простой графический интерфейс, чтобы взять номер мобильного телефона и текст SMS для отправки и простую кнопку для отправки SMS. |
4 | Нет необходимости определять строковые константы по умолчанию в res / values / strings.xml. Android студия заботится о константах по умолчанию. |
5 | Измените AndroidManifest.xml, как показано ниже |
6 | Запустите приложение, чтобы запустить эмулятор Android, и проверьте результат изменений, внесенных в приложение. |
Ниже приведено содержимое измененного основного файла активности src / com.example.tutorialspoint / MainActivity.java .
Ниже будет содержание файла res / layout / activity_main.xml —
Здесь abc указывает на логотип tutorialspoint
Ниже будет содержимое файла res / values / strings.xml для определения двух новых констант:
Ниже приводится содержимое по умолчанию для AndroidManifest.xml —
Давайте попробуем запустить ваше приложение tutorialspoint . Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из студии Android, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». значок с панели инструментов. Перед запуском приложения установщик Android-студии отобразит следующее окно, чтобы выбрать вариант, в котором вы хотите запустить приложение Android.
Теперь вы можете ввести нужный номер мобильного телефона и текстовое сообщение, которое будет отправлено на этот номер. Наконец, нажмите кнопку « Отправить SMS» , чтобы отправить SMS. Убедитесь, что ваше соединение GSM / CDMA работает нормально, чтобы доставить ваше SMS получателю.
Вы можете взять несколько SMS, разделенных запятой, а затем внутри вашей программы вам придется анализировать их в строку массива, и, наконец, вы можете использовать цикл для отправки сообщения на все заданные номера. Вот как вы можете написать свой собственный клиент SMS. Следующий раздел покажет вам, как использовать существующий клиент для отправки SMS.
Использование встроенного намерения для отправки SMS
Вы можете использовать Android Intent для отправки SMS, вызывая встроенную функцию SMS в Android. В следующем разделе описываются различные части нашего объекта Intent, необходимые для отправки SMS.
Intent Object — Действие для отправки SMS
Вы будете использовать действие ACTION_VIEW, чтобы запустить клиент SMS, установленный на вашем устройстве Android. Ниже приведен простой синтаксис для создания намерения с действием ACTION_VIEW.
Intent Object — Данные / Тип для отправки SMS
Для отправки SMS необходимо указать smsto: в качестве URI с помощью метода setData () и тип данных будет vnd.android-dir / mms-sms с помощью метода setType () следующим образом:
Intent Object — Дополнительно для отправки SMS
Android имеет встроенную поддержку для добавления номера телефона и текстового сообщения для отправки SMS следующим образом:
Здесь address и sms_body чувствительны к регистру и должны указываться только маленькими символами. Вы можете указать более одного числа в одной строке, но разделяя их точкой с запятой (;).
пример
В следующем примере показано, как с помощью объекта Intent запустить клиент SMS для отправки SMS получателям.
Чтобы поэкспериментировать с этим примером, вам понадобится настоящее мобильное устройство с новейшей ОС Android, в противном случае вам придется бороться с эмулятором, который может не работать.
шаг | Описание |
---|---|
1 | Вы будете использовать IDE Android Studio для создания приложения Android и назовите его как tutorialspoint в пакете com.example.tutorialspoint . |
2 | Измените файл src / MainActivity.java и добавьте необходимый код для отправки SMS. |
3 | Измените XML-файл макета. Res / layout / activity_main.xml добавьте любой компонент GUI, если это необходимо. Я добавляю простую кнопку для запуска SMS-клиента. |
4 | Нет необходимости определять константы по умолчанию. Android-студия заботится о константах по умолчанию. |
5 | Измените AndroidManifest.xml, как показано ниже |
6 | Запустите приложение, чтобы запустить эмулятор Android, и проверьте результат изменений, внесенных в приложение. |
Ниже приведено содержимое измененного основного файла активности src / com.example.tutorialspoint / MainActivity.java .
Ниже будет содержание файла res / layout / activity_main.xml —
Здесь abc указывает на логотип tutorialspoint
Ниже будет содержимое файла res / values / strings.xml для определения двух новых констант:
Ниже приводится содержимое по умолчанию для AndroidManifest.xml —
Давайте попробуем запустить ваше приложение tutorialspoint . Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из студии Android, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». значок с панели инструментов. Перед запуском приложения Android Studio отобразит следующее окно, чтобы выбрать опцию, в которой вы хотите запустить приложение Android.
Выберите мобильное устройство в качестве опции, а затем проверьте свое мобильное устройство, которое отобразит следующий экран —
Теперь используйте кнопку « Создать SMS» для запуска встроенных в Android клиентов SMS, как показано ниже:
Вы можете изменить любое из указанных полей по умолчанию и, наконец, использовать кнопку «Отправить SMS», чтобы отправить свое SMS указанному получателю.
Источник