Как написать смс на андроиде
Перейти к содержимому

Как написать смс на андроиде

  • автор:

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

программирование отправки 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 шаблон приложения

Перейдем к редактированию кода. В 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 пользователю будет показано сообщение «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 сообщения в Android. Это очень интересная и нужная возможность. Например, вы можете написать приложение, которое будет отслеживать положение телефона. Вы можете отправлять зашифрованные SMS сообщения этому приложению, и оно будет отправлять вам ответ с координатами аппарата.

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

Андроид отправка SMS сообщении

Есть база номеров моих постоянных клиентов. Я хотел написать приложение, которое может отправлять им SMS сообщения с моего номера. Как реализуется отправка сообщении в Андроид?

Отслеживать
2,178 12 12 серебряных знаков 17 17 бронзовых знаков
задан 13 дек 2016 в 13:58
yoralbayev yoralbayev
21 5 5 бронзовых знаков

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

13 дек 2016 в 14:20

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Чтобы отправить текстовое сообщение из приложения, в файл манифеста нужно добавить разрешение android.permission.SEND_SMS и затем воспользоваться классом android.telephony.SmsManager .

private void sendSmsMessage(String address, String message) throws Exception

Параметры метода означают следующее: address — адрес получателя SMS-сообщения (его телефонный номер), message — текст смс-сообщения.

Как написать смс на андроиде

Для отправки смс используется константа Intent.ACTION_SEND . Создадим простейший интферфейс для отправки смс:

И определим обработчик кнопки в коде activity:

package com.example.eugene.telephoneapp; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.content.Intent; import android.view.View; import android.widget.EditText; import android.net.Uri; public class MainActivity extends ActionBarActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); >public void smsSend(View v) < EditText number=(EditText)findViewById(R.id.number); EditText message=(EditText)findViewById(R.id.message); String toSms="smsto:"+number.getText().toString(); String messageText= message.getText().toString(); Intent sms=new Intent(Intent.ACTION_SENDTO, Uri.parse(toSms)); sms.putExtra("sms_body", messageText); startActivity(sms); >>

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

Отправка смс в Android

После выбора программы можно будет подредактировать и уже потом окончательно отправить сообщение:

Набор смс в Android

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

Исправим код обработчика кнопки:

public void dial(View v)

Для отправки используется класс SmsManager из пакета android.telephony. Его статический метод getDefault() возвращает объект данного класса. Для самой отправки применяется метод sendTextMessage() , который принимает пять параметров: номер телефона, адрес сервисного центра (в данном случае null), сообщение к отправке и два спецальных объкта PendingIntent, которые показывают статус отправки и доставки (в данном случае также null).

Как читать и отправлять сообщения СМС Android с компьютера

Как отправлять СМС с компьютера через Android

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

Использование Android Messages для чтения и отправки СМС

Для того, чтобы использовать отправку сообщений «через» Android телефон с компьютера или ноутбука вам потребуется:

  • Сам Android смартфон, который должен быть подключен к Интернету, а на нем — одна из последних версий оригинального приложения «Сообщения» от Google.
  • Компьютер или ноутбук, с которого будут выполняться действия, также подключенный к Интернету. При этом нет обязательного требования, чтобы оба устройства были подключены к одной сети Wi-Fi.

Если условия соблюдены, то дальнейшие шаги будут выглядеть следующим образом

  1. В любом браузере на компьютере зайдите на сайт https://messages.android.com/ (какой-либо вход с учетной записью Google не требуется). На странице будет отображен QR-код, который потребуется далее. QR код для веб-версии Android сообщений
  2. На телефоне запустите приложение «Сообщения», нажмите по кнопке меню (три точки справа вверху) и нажмите «Веб-версия Сообщений». Нажмите «Сканировать QR-код» и отсканируйте представленный на сайте QR-код с помощью камеры вашего телефона. Подключить Android сообщения к веб-версии
  3. Через короткое время будет установлена связь с вашим телефоном и в браузере откроется интерфейс сообщений со всеми уже имеющимися на телефоне сообщениями, возможностью получать и отправлять новые сообщения. Отправка СМС сообщений с компьютера
  4. Примечание: сообщения отправляются именно через ваш телефон, т.е. если оператор взимает за них плату, то они останутся платными несмотря на то, что вы работаете с СМС с компьютера.

При желании, на первом шаге, под QR-кодом вы можете включить переключатель «Запомнить этот компьютер», чтобы не сканировать код каждый раз. Более того, если всё это проделывалось на ноутбуке, который всегда с собой, и вы случайно забыли ваш телефон дома, у вас останется возможность получать и отправлять сообщения.

В целом, очень удобно, просто и не требует никаких дополнительных средств и приложений от сторонних разработчиков. Если работа с СМС с компьютера для вас актуальна — рекомендую.

А вдруг и это будет интересно:

  • Лучшие бесплатные программы для Windows
  • TakeOwnershipEx — получение полного доступа к папкам и файлам и восстановление прав по умолчанию
  • Ошибка 0x8007000d в Windows 11 или 10 — как исправить?
  • Chrome открывает поиск вместо сайта — решение
  • Недопустимая конфигурация приложения в Steam — варианты решения
  • Ошибка при запуске приложения 0xc0000006 — как исправить?
  • Windows 11
  • Windows 10
  • Android
  • Загрузочная флешка
  • Лечение вирусов
  • Восстановление данных
  • Установка с флешки
  • Настройка роутера
  • Всё про Windows
  • В контакте
  • Одноклассники

    BoB4uk 19.09.2018 в 10:39

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *