Отправляем SMS сообщение из приложения
Главная » Отправляем SMS сообщение из приложения

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

Начнем с создания нового проекта, выбираем версию Android 2.2+, Blank Activity. Первым делом нужно получить необходимое разрешение для приложения, чтобы оно обрело способность работать с SMS сообщениями аппарата. Для этого идем в файл AndoidManifest.xml и добавляем туда следующее разрешение:

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

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/linearLayout1"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:padding="5dp" >

 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Номер телефона : "/>
 <EditText
 android:id="@+id/mobileNumber"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:hint="Введите номер"
 android:phoneNumber="true" >
 </EditText>

 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Ваше сообщение: "/>

 <EditText
 android:id="@+id/smsBody"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:gravity="top"
 android:hint="Введите сообщение"
 android:inputType="textMultiLine"
 android:lines="5" />

 <LinearLayout
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:weightSum="10" >

 <Button
 android:id="@+id/sendViaIntent"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_weight="5"
 android:text="Перейти в SMS" />

 <Button
 android:id="@+id/send"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_weight="5"
 android:text="Отправить" />
 </LinearLayout>

</LinearLayout>

Приложение будет выглядеть вот так:

Отправляем смс сообщение

Теперь осталось написать необходимый код. Открываем файл MainActivity.java и добавляем сюда следующее:

import android.app.Activity;
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;

public class MainActivity extends Activity {
 
 //Объявляем переменные: 
 private Button shareIntent;
 private Button send;
 private EditText phoneNo;
 private EditText messageBody;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 //Связываемся с элементами интерфейса:
 phoneNo = (EditText) findViewById(R.id.mobileNumber);
 messageBody = (EditText) findViewById(R.id.smsBody);
 
 send = (Button) findViewById(R.id.send);
 //Настраиваем обработку нажатия кнопки "Отправить":
 send.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 String number = phoneNo.getText().toString();
 String sms = messageBody.getText().toString();

 //С помощью SMS менеджера отправляем сообщение и высвечиваем 
 //Toast сообщение об успехе операции:
 try {
 SmsManager smsManager = SmsManager.getDefault();
 smsManager.sendTextMessage(number, null, sms, null, null);
 Toast.makeText(getApplicationContext(), 
 "SMS отправлено!",Toast.LENGTH_LONG).show();
 } 
 //В случае фейла высвечиваем соответствующее сообщение:
 catch (Exception e) {
 Toast.makeText(getApplicationContext(),
 "SMS не отправлено, попытайтесь еще!", Toast.LENGTH_LONG).show();
 e.printStackTrace();
 }
 }
 });

 shareIntent = (Button) findViewById(R.id.sendViaIntent);
 //Настраиваем обработку нажатия кнопки "Перейти в SMS":
 shareIntent.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 
 //С помощью намерения Intent выполняем переход 
 //в стандартное SMS приложение аппарата:
 try {
 Intent sendIntent = new Intent(Intent.ACTION_VIEW);
 //Передаем в него текст сообщения с нашего приложения:
 sendIntent.putExtra("sms_body", messageBody.getText().toString());
 sendIntent.setType("vnd.android-dir/mms-sms");
 startActivity(sendIntent);
 } 
 //В случае неудачи - сообщение об ошибке:
 catch (Exception e) {
 Toast.makeText(getApplicationContext(),
 "SMS не отправлено, попытайтесь еще!", Toast.LENGTH_LONG).show();
 e.printStackTrace();
 }
 }
 });
 }
}

По сути сам процесс отправки сообщения выполняется в помощью SmsManager, который мы вызываем при нажатии кнопки "Отправить", передаем в этот менеджер данные о введенных номере и текст сообщении, преобразовывая их в строки, и  задаем отправку сообщения с помощью команды sendTextMessage, дополняя это всплывающим Toast сообщением об успехе или неудаче операции.

Также мы снабдили наше приложение возможностью вызова стандартного приложения для отправки SMS на Android устройстве. При его вызове с помощью Intent, аналогично переходу на другое activity, мы передаем в стандартное приложение введенный текст в поле сообщения и в стандартном приложении отобразиться введенный в нашем приложении текст. 

Запускаем приложение и смотрим, что у нас вышло:

отправляем сообщение

Теперь можем выбрать жертву и забомбить SMS сообщениями :).

Категория: Уроки программирования | Просмотров: 1365 | Добавил: Oleg | Теги: sms, отправка текстового сообщения, SMS сообщение, Android программирование | Рейтинг: 5.0/1
Всего комментариев: 4
avatar
1 stetsiuk • 14:24, 09.12.2015
public class MainActivity extends Activity { подчеркивает MainActivity
avatar
0
2 Oleg • 21:15, 09.12.2015
возможно у тебя нет этого класса или он имеет другое название, не MainActivity
avatar
3 stetsiuk • 23:43, 10.12.2015
какие методи сдесь использовались? напишите отдельно
avatar
4 misterpilot • 18:14, 16.01.2016
Добрый вечер, Олег. Не могли бы вы закинуть на почту что то типа исходника всего проделанного ? Если не затруднит конечно. У меня половина красным подчеркнута.
avatar