Главная » Отправляем 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="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 сообщениями :). | |
|
Всего комментариев: 4 | |
| |