Учебники

Android — отправка смс

В Android вы можете использовать API-интерфейс SmsManager или встроенное приложение SMS для отправки SMS. В этом уроке мы покажем вам два основных примера отправки SMS-сообщения:

SmsManager API

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("phoneNo", null, "sms message", null, null);

Встроенное SMS-приложение

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", "default content"); 
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);

Конечно, обоим нужно разрешение SEND_SMS .

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

Помимо описанного выше метода, в классе SmsManager есть еще несколько важных функций. Эти методы перечислены ниже —

Sr.No. Метод и описание
1

ArrayList <String >divMessage (String text)

Этот метод делит текст сообщения на несколько фрагментов, не превышающих максимальный размер сообщения SMS.

2

статический SmsManager getDefault ()

Этот метод используется для получения экземпляра SmsManager по умолчанию

3

void sendDataMessage (String destinationAddress, String scAddress, short destinationPort, byte [] data, PendingIntent sentIntent, PendingIntent deliveryIntent)

Этот метод используется для отправки SMS на основе данных на определенный порт приложения.

4

void sendMultipartTextMessage (String destinationAddress, String scAddress, ArrayList <String> parts, ArrayList <PendingIntent> sentIntents, ArrayList <PendingIntent> deliveryIntents)

Отправьте текстовое SMS-сообщение из нескольких частей.

5

void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)

Отправьте текстовое SMS.

ArrayList <String >divMessage (String text)

Этот метод делит текст сообщения на несколько фрагментов, не превышающих максимальный размер сообщения SMS.

статический SmsManager getDefault ()

Этот метод используется для получения экземпляра SmsManager по умолчанию

void sendDataMessage (String destinationAddress, String scAddress, short destinationPort, byte [] data, PendingIntent sentIntent, PendingIntent deliveryIntent)

Этот метод используется для отправки SMS на основе данных на определенный порт приложения.

void sendMultipartTextMessage (String destinationAddress, String scAddress, ArrayList <String> parts, ArrayList <PendingIntent> sentIntents, ArrayList <PendingIntent> deliveryIntents)

Отправьте текстовое SMS-сообщение из нескольких частей.

void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)

Отправьте текстовое SMS.

пример

В следующем примере показано, как на практике использовать объект SmsManager для отправки SMS-сообщения на указанный номер мобильного телефона.

Чтобы поэкспериментировать с этим примером, вам понадобится настоящее мобильное устройство с новейшей ОС Android, в противном случае вам придется бороться с эмулятором, который может не работать.

шаг Описание
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 .

package com.example.tutorialspoint;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.app.Activity;

import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.telephony.SmsManager;

import android.util.Log;
import android.view.Menu;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
   private static final int MY_PERMISSIONS_REQUEST_SEND_SMS =0 ;
   Button sendBtn;
   EditText txtphoneNo;
   EditText txtMessage;
   String phoneNo;
   String message;

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

      sendBtn = (Button) findViewById(R.id.btnSendSMS);
      txtphoneNo = (EditText) findViewById(R.id.editText);
      txtMessage = (EditText) findViewById(R.id.editText2);

      sendBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            sendSMSMessage();
         }
      });
   }
	
   protected void sendSMSMessage() {
      phoneNo = txtphoneNo.getText().toString();
      message = txtMessage.getText().toString();
		
      if (ContextCompat.checkSelfPermission(this,
         Manifest.permission.SEND_SMS)
         != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
               Manifest.permission.SEND_SMS)) {
            } else {
               ActivityCompat.requestPermissions(this,
                  new String[]{Manifest.permission.SEND_SMS},
                  MY_PERMISSIONS_REQUEST_SEND_SMS);
            }
      }
   }
	
   @Override
   public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
      switch (requestCode) {
         case MY_PERMISSIONS_REQUEST_SEND_SMS: {
            if (grantResults.length > 0
               && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                  SmsManager smsManager = SmsManager.getDefault();
                  smsManager.sendTextMessage(phoneNo, null, message, null, null);
                  Toast.makeText(getApplicationContext(), "SMS sent.", 
                     Toast.LENGTH_LONG).show();
            } else {
               Toast.makeText(getApplicationContext(), 
                  "SMS faild, please try again.", Toast.LENGTH_LONG).show();
               return;
            }
         }
      }

   }
}

Ниже будет содержание файла res / layout / activity_main.xml

Здесь abc указывает на логотип tutorialspoint

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="MainActivity">

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Sending SMS Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:hint="Enter Phone Number"
      android:phoneNumber="true"
      android:textColorHint="@color/abc_primary_text_material_dark"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />

   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_below="@+id/editText"
      android:layout_alignLeft="@+id/editText"
      android:layout_alignStart="@+id/editText"
      android:textColorHint="@color/abc_primary_text_material_dark"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton"
      android:hint="Enter SMS" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Send Sms"
      android:id="@+id/btnSendSMS"
      android:layout_below="@+id/editText2"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="48dp" />

</RelativeLayout>

Ниже будет содержимое файла res / values ​​/ strings.xml для определения двух новых констант:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">tutorialspoint</string>
</resources>

Ниже приводится содержимое по умолчанию для AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint" >
  
   <uses-permission android:name="android.permission.SEND_SMS" />
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Давайте попробуем запустить ваше приложение tutorialspoint . Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из студии Android, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок с панели инструментов. Перед запуском приложения установщик 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 smsIntent = new Intent(Intent.ACTION_VIEW);

Intent Object — Данные / Тип для отправки SMS

Для отправки SMS необходимо указать smsto: в качестве URI с помощью метода setData () и тип данных будет vnd.android-dir / mms-sms с помощью метода setType () следующим образом:

smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");

Intent Object — Дополнительно для отправки SMS

Android имеет встроенную поддержку для добавления номера телефона и текстового сообщения для отправки SMS следующим образом:

smsIntent.putExtra("address"  , new String("0123456789;3393993300"));
smsIntent.putExtra("sms_body"  , "Test SMS to Angilla");

Здесь 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 .

package com.example.tutorialspoint;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      Button startBtn = (Button) findViewById(R.id.button);
      startBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            sendSMS();
         }
      });
   }
   
   protected void sendSMS() {
      Log.i("Send SMS", "");
      Intent smsIntent = new Intent(Intent.ACTION_VIEW);
      
      smsIntent.setData(Uri.parse("smsto:"));
      smsIntent.setType("vnd.android-dir/mms-sms");
      smsIntent.putExtra("address"  , new String ("01234"));
      smsIntent.putExtra("sms_body"  , "Test ");
      
      try {
         startActivity(smsIntent);
         finish();
         Log.i("Finished sending SMS...", "");
      } catch (android.content.ActivityNotFoundException ex) {
         Toast.makeText(MainActivity.this, 
         "SMS faild, please try again later.", Toast.LENGTH_SHORT).show();
      }
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }
}

Ниже будет содержание файла res / layout / activity_main.xml

Здесь abc указывает на логотип tutorialspoint

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Drag and Drop Example"
      android:id="@+id/textView"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials Point "
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:textSize="30dp"
      android:textColor="#ff14be3c" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_marginTop="48dp"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Compose SMS"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_alignRight="@+id/textView2"
      android:layout_alignEnd="@+id/textView2"
      android:layout_marginTop="54dp"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView" />
      
</RelativeLayout>

Ниже будет содержимое файла res / values ​​/ strings.xml для определения двух новых констант:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">tutorialspoint</string>
</resources>

Ниже приводится содержимое по умолчанию для AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint" >
      
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Давайте попробуем запустить ваше приложение tutorialspoint . Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из студии Android, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок с панели инструментов. Перед запуском приложения Android Studio отобразит следующее окно, чтобы выбрать опцию, в которой вы хотите запустить приложение Android.

Мобильное устройство Android

Выберите мобильное устройство в качестве опции, а затем проверьте свое мобильное устройство, которое отобразит следующий экран —

Android Mobile SMS Compose

Теперь используйте кнопку « Создать SMS» для запуска встроенных в Android клиентов SMS, как показано ниже:

Android Мобильный SMS Экран

Вы можете изменить любое из указанных полей по умолчанию и, наконец, использовать кнопку «Отправить SMS», чтобы отправить свое SMS указанному получателю.