Отправка и получение 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 и приведите его к виду:
xml version="1.0" encoding="utf-8"?>
Настроим шаблон дизайна приложения. Откройте файл res/layout/main.xml и приведите его к виду
xml version="1.0" encoding="utf-8"?>
В результате у Вас должен получиться следующий шаблон:

Перейдем к редактированию кода. В SMS activity напишем обработчик нажатия на кнопку. После щелчка мы должны проверить введен ли номер телефона и текстовое сообщение. Если все в порядке, мы вызываем функцию sendSMS(), которая отправляет сообщение.
package net.learn2develop.SMSMessaging; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.telephony.gsm.SmsManager; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; publicclass SMSextends Activity { Button btnSendSMS; EditText txtPhoneNo; EditText txtMessage; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnSendSMS=(Button) findViewById(R.id.btnSendSMS); txtPhoneNo=(EditText) findViewById(R.id.txtPhoneNo); txtMessage=(EditText) findViewById(R.id.txtMessage); btnSendSMS.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { String phoneNo= txtPhoneNo.getText().toString(); String message= txtMessage.getText().toString(); if(phoneNo.length()>0&& message.length()>0) sendSMS(phoneNo, message); else Toast.makeText(getBaseContext(), "Please enter both phone number and message.", Toast.LENGTH_SHORT).show(); } }); } }
Напишем реализацию функции sendSMS()
private void sendSMS(String phoneNumber, String message) { PendingIntentpi= PendingIntent.getActivity(this,0, new Intent(this, SMS.class),0); SmsManager sms= SmsManager.getDefault(); sms.sendTextMessage(phoneNumber,null, message,pi,null); }
Для отправки SMS сообщения в Android используется класс SmsManager. в отличии от друих классов, мы не можем получить экземпляр SmsManager напрямую. Для решения этой задачи необходимо вызвать статический метод getDefault(), который возвращает требуемый объект класса SmsManager. Метод sendTextMessage() отправляет sms сообщение с помощью PendingIntent. Объект PendingIntent используется для определения activity, которая будет вызвана после отправки сообщения. В приведенном выше коде объект pi ссылается на ту же activity из которой он вызывается, то есть после отправки SMS сообщения activity не поменяется.
Если Вы хотите отслеживать состояние процесса отправки сообщения, вам понадобится два объекта PendingIntent и два объекта BroadcastReceiver
private void sendSMS(String phoneNumber, String message) { 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); //---когда SMS отправлено--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1){ switch(getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(),"SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(),"Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(),"No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(),"Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(),"Radio off", Toast.LENGTH_SHORT).show(); break; } } },new IntentFilter(SENT)); //---когда SMS доставлено--- registerReceiver(new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1){ switch(getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(),"SMS delivered", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(getBaseContext(),"SMS not delivered", Toast.LENGTH_SHORT).show(); break; } } },new IntentFilter(DELIVERED)); SmsManager sms= SmsManager.getDefault(); sms.sendTextMessage(phoneNumber,null, message, sentPI, deliveredPI); }
В приведенном выше листинге объект sentPI используется для отслеживания процесса отправки. Когда SMS сообщение отправлено, генерируется первое событие onReceive для BroadcastReceiver. Именно здесь можно проверить статус процесса отправки. Объект PendingIntent (deliveredPI) используется для мониторинга доставки. Когда сообщение успешно доставлено, генерируется еще одно событие onReceive для BroadcastReceiver.
Теперь можно провести тесстирование приложения. При отладке на компьютере можно посылать сообщения от одного эмулятора другому. Для этого просто запустите два эмулятора (в папке android SDK зайдите в каталог Tools Emulator.exe). В качестве номера, куда вы отправляете SMS, нужно указать номер порта эмулятора. Его можно увидеть в загаловке окна эмулятора в круглых скобках. На рисунке показан пример отправки сообщения с эмултора 5554 на эмулятор 5556.

После успешной отправки SMS пользователю будет показано сообщение «SMS sent». После того, как сообщение будет принято на другом устройстве, пользователь увидит «SMS delivered». К сожалению, в случае тестирования на эмуляторе Вы не увидите этого сообщения. Возможность проверять успешность доставки доступна только на реальных устройствах.
Если Вы не хотите разбираться в тонкостях отправки SMS сообщений, то можете воспользоваться встроенным в Android стандартным приложением, дав ему задание через интент.
Intent sendIntent=new Intent(Intent.ACTION_VIEW); sendIntent.putExtra("sms_body","Content of the SMS goes here. "); sendIntent.setType("vnd.android-dir/mms-sms"); startActivity(sendIntent);
Получение SMS сообщений в Android
Помимо отправки SMS вы также можете организовать перехват входящих SMS сообщений. Делается это с помощью все того же объекта BroadcastReceiver.
Чтобы Ваше приложение могло перехватывать SMS-ки, нужно в файле AndroidManifest.xml добавить элемент . В приведенном ниже примере для получения сообщений будет использоваться класс SmsReceiver.
xml version="1.0" encoding="utf-8"?>
Теперь нужно добавить в проект новый класс SmsReceiver.java, который является наследником BroadcastReceiver. Внутри SmsReceiver нужно написать собственную реализацию метода onReceive()
package net.learn2develop.SMSMessaging; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; publicclass SmsReceiverextends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } }
При получении SMS сообщения вызывается метод onReceive. SMS сообщение упаковывается и присоединяется к объекту intent (второй параметр метода onReceive). SMS сохраняется в массиве Object в PDU формате. Чтобы распаковать SMS сообщение нужно воспользоваться методом createFromPdu() класса SmsMessage. После этого можно отобразить сообщения с помощью класса Toast
package net.learn2develop.SMSMessaging; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.gsm.SmsMessage; import android.widget.Toast; publicclass SmsReceiverextends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //---получить входящее SMS сообщение--- Bundle bundle= intent.getExtras(); SmsMessage[] msgs=null; String str=""; if(bundle!=null) { //---извлечь полученное SMS --- Object[] pdus=(Object[]) bundle.get("pdus"); msgs=new SmsMessage[pdus.length]; for(int i=0; imsgs.length; i++){ msgs[i]= SmsMessage.createFromPdu((byte[])pdus[i]); str+="SMS from "+ msgs[i].getOriginatingAddress(); str+=" :"; str+= msgs[i].getMessageBody().toString(); str+="\n"; } //---Показать новое SMS сообщение--- Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); } } }
Вот, собственно, и все! Можете запускать эмуляторы и тестировать приложение. На приведенном ниже рисунке с помощью класса Toast показано полученное сообщение.

Заключение
В этой небольшой статье было показано, как можно отправлять и получать SMS сообщения в Android. Это очень интересная и нужная возможность. Например, вы можете написать приложение, которое будет отслеживать положение телефона. Вы можете отправлять зашифрованные SMS сообщения этому приложению, и оно будет отправлять вам ответ с координатами аппарата.
Исходный код примера можно скачатьздесь.
Отправка SMS и MMS в Android
Для создания сообщений зайдите в них с рабочего стола. Сообщения в Android организованы несколько нестандартным способом. Здесь нет каталогов Входящие, Исходящие. Общение отображается с помощью диалогов. Этот способ делает переписку максимально простой и наглядной. Обмен SMS в Android напоминает чаты, которые используются в интернете.
В Android максимально убрали разницу между SMS и MMS. Теперь есть просто сообщения, а программа уже сама решает, отправлять это сообщение посредством SMS или MMS. Если сообщение очень длинное и превышает четыре стандартных SMS-сообщения, программа автоматически конвертирует его в MMS, так как понимает, что обычно одно MMS стоит дешевле, чем четыре SMS. Также, если необходимо вложить картинку, мелодию или видео (доступно очень много вариантов), сообщение будет передаваться, как MMS.


Вы здесь: Android Manual Инструкции Отправка SMS и MMS в Android
Как написать и отправить СМС-сообщение со смартфона с ОС Андроид

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

Отправка СМС-ок на телефоне осуществляется через стандартное приложение «Сообщения». В нем хранятся все входящие и исходящие письма, отправленные или принятые средствами стандартной телефонии. Поэтому, если вы решите написать короткое письмо, воспользуйтесь инструкцией:
- Откройте приложение «Сообщения».
- Нажмите на кнопку создания нового письма (обычно обозначается символом «+»).

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

Обратите внимание, что SMS-сообщения тарифицируются в соответствии с объемом послания. Одна СМС-ка рассчитана на 160 символов. Следовательно, если текст вашего сообщения составит 170 символов, вы заплатите за два SMS. При этом отправка письма объемом в 10-20 символов ни капли не выгоднее послания на все 160 символов. СМС тарифицируются в большую сторону.

В некоторых ситуациях, когда объем письма превышает несколько сотен символов, становится выгоднее использовать сервис MMS. В отличие от SMS-сообщений, ММС-ки позволяют уместить до 1600 символов, а также вставить в послание мультимедийный файл объемом до 300 Кб. Отправка в таком случае также осуществляется через приложение «Сообщения», а формат письма автоматически определяется размером текста и наличием мультимедиа.
Как правильно настроить SMS
Хотя сервис SMS-сообщений с нами уже несколько десятков лет, по умолчанию он может не работать на некоторых устройствах. Причина подобной проблемы заключается не в отсутствии поддержки СМС, а в незарегистрированной точке доступа для отправки коротких сообщений. Заполнить все необходимые параметры вы можете следующим образом:
- Откройте номеронабиратель.
- Введите запрос *#*# 4636#*#*.

- Нажмите на кнопку вызова.

- В появившемся меню перейдите в «Сведения об устройстве», а затем – «SMSC».
- Укажите номер СМС-центра.

- Нажмите на кнопку «Обновить».

Номер SMS-центра следует уточнять у оператора сотовой связи. У каждой компании он свой, а потому настройки будут отличаться. Для уточнения информации посетите официальный сайт фирмы, чьим клиентом вы являетесь, а затем воспользуйтесь поисковой строкой. При отсутствии необходимой информации – позвоните в службу поддержки оператора.
Возможные проблемы
При попытке отправить СМС-сообщение вы можете столкнуться с проблемой, когда письмо не доходит до адресата. В этой ситуации необходимо следовать рекомендациям:
- Проверьте состояние лицевого счета.
- Убедитесь в правильности настроек SMS.
- Проверьте, не превышает ли объем сообщения установленные лимиты.
- Повторите отправку письма.

Если проблему не удается решить, то в обязательном порядке свяжитесь со службой поддержки оператора сотовой связи. Сотрудники компании должны проинструктировать вас, а также подсказать, какие данные необходимо заполнить для восстановления работы сервиса СМС.
Как отправить SMS или MMS-сообщение на смартфоне Samsung Galaxy
SMS-сообщение — это один из базовых способов связи через смартфон. Если вы не можете дозвониться до абонента или у вас не работает интернет, отправьте ему SMS-сообщение с нужной информацией.
Современные смартфоны поддерживают отправку не только текста (SMS) и фото (MMS), но и видео, стикеров и аудиосообщений.
- Как отправить сообщение
- Как отправить голосовое сообщение
- Как отправить фото или видео

Как отправить сообщение

Шаг 1. Откройте приложение Сообщения и нажмите на кнопку Начать новый диалог в правом нижнем углу. Если нужный абонент уже писал вам, откройте диалог с ним из списка и перейдите к шагу 4.

Шаг 2. Нажмите на «+» для выбора из списка сохраненных контактов. Если получателя нет в списке контактов, введите в поле его номер телефона и перейдите к шагу 4.

Шаг 3. Выберите получателя и нажмите кнопку Готово.

Шаг 4. Нажмите на поле, расположенное в нижней части экрана, для отображения экранной клавиатуры. Наберите сообщение. Для отправки нажмите на кнопку Отправить справа от поля.

Шаг 5. Отправленное сообщение появится в окне текущего диалога.
Если в данных контакта указано несколько телефонных номеров, нажмите здесь
Если в данных контакта указано несколько номеров, на экране появится окно со списком доступных телефонов. Выберите нужный номер. Для подтверждения нажмите Выбор (отправить на этот номер только в этот раз) или на Назначить по умолчанию (чтобы всегда отправлять SMS на этот номер абонента).

Если вам нужно отправить одинаковое SMS-сообщение разным адресатам, нажмите здесь

Во время выбора контактов, вы можете выбрать несколько человек из списка контактов или указать несколько телефонных номеров через запятую.

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

У получателей SMS будет указан только контакт отправителя. Ответ на сообщение придет в личный диалог с абонентом.
В SMS-сообщении можно использовать эмодзи (смайлики). Чтобы добавить эмодзи в сообщение, нажмите на значок в правом нижнем углу поля ввода текста. Затем выберите и нажмите на нужный эмодзи — он появится в сообщении.

В этом же окне вы можете выбрать стикер, анимированную картинку или AR emoji, но они будут отправлены как MMS-сообщение.
Как отправить голосовое сообщение

Для начала записи нажмите и удерживайте кнопку Запись голосового сообщения в правом нижнем углу диалога.

Удерживая кнопку , надиктуйте сообщение. Для завершения записи отпустите кнопку .


Вы можете прослушать запись, нажав на кнопку
Play . Если сообщение нужно перезаписать, нажмите на красный крестик для удаления записи. Чтобы отправить сообщение, нажмите на кнопку Отправить .

Голосовое сообщение будет отправлено как MMS.
Как отправить фото или видео

Чтобы сделать фото или записать видео, нажмите на кнопку Камера и выберите нужное действие. Включится камера смартфона и вы сможете сделать с помощью нее снимок или видео. После преобразования в ММS-сообщение, файл можно будет отправить, нажав кнопку .

Чтобы прикрепить изображение из памяти телефона, нажмите на значок Изображение . Внизу экрана откроется галерея изображений начиная с самых новых сохраненных файлов. Либо откройте приложение Галерея и выберите изображение из нее. Для этого нажмите на значок приложения
внизу в центре.

Выберите нужный файл и дождитесь его преобразования в MMS-сообщение. Чтобы отправить изображение, нажмите на кнопку
Отправить .

Изображение и видео отправляются как MMS.