Android - Envoi de SMS

Sous Android, vous pouvez utiliser l'API SmsManager ou l'application SMS intégrée pour envoyer des SMS. Dans ce tutoriel, nous vous montrons deux exemples de base pour envoyer un message SMS -

SmsManager API

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

Built-in SMS application

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

Bien sûr, les deux ont besoin SEND_SMS permission.

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

En dehors de la méthode ci-dessus, il existe peu d'autres fonctions importantes disponibles dans la classe SmsManager. Ces méthodes sont énumérées ci-dessous -

N ° Sr. Méthode et description
1

ArrayList<String> divideMessage(String text)

Cette méthode divise le texte d'un message en plusieurs fragments, dont aucun ne dépasse la taille maximale du message SMS.

2

static SmsManager getDefault()

Cette méthode est utilisée pour obtenir l'instance par défaut du SmsManager

3

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

Cette méthode est utilisée pour envoyer un SMS basé sur des données à un port d'application spécifique.

4

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

Envoyez un SMS en plusieurs parties.

5

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

Envoyez un SMS texte.

Exemple

L'exemple suivant vous montre en pratique comment utiliser l'objet SmsManager pour envoyer un SMS au numéro de mobile donné.

Pour expérimenter cet exemple, vous aurez besoin d'un appareil mobile équipé du dernier système d'exploitation Android, sinon vous devrez lutter avec un émulateur qui pourrait ne pas fonctionner.
Étape La description
1 Vous utiliserez Android Studio IDE pour créer une application Android et la nommerez comme tutorialspoint sous un package com.example.tutorialspoint .
2 Modifiez le fichier src / MainActivity.java et ajoutez le code requis pour prendre en charge l'envoi de sms.
3 Modifiez le fichier XML de mise en page res / layout / activity_main.xml, ajoutez un composant GUI si nécessaire. J'ajoute une interface graphique simple pour prendre le numéro de mobile et le texte SMS à envoyer et un simple bouton pour envoyer des SMS.
4 Pas besoin de définir des constantes de chaîne par défaut à res / values ​​/ strings.xml. Le studio Android prend en charge les constantes par défaut.
5 Modifiez AndroidManifest.xml comme indiqué ci-dessous
6 Exécutez l'application pour lancer l'émulateur Android et vérifiez le résultat des modifications effectuées dans l'application.

Voici le contenu du fichier d'activité principal modifié 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;
            }
         }
      }

   }
}

Voici le contenu de res/layout/activity_main.xml fichier -

Ici abc indique le logo 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>

Voici le contenu de res/values/strings.xml pour définir deux nouvelles constantes -

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

Voici le contenu par défaut de 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>

Essayons d'exécuter votre tutorialspointapplication. Je suppose que vous avez connecté votre appareil mobile Android à votre ordinateur. Pour exécuter l'application à partir du studio Android, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Avant de démarrer votre application, le programme d'installation d'Android Studio affichera la fenêtre suivante pour sélectionner une option dans laquelle vous souhaitez exécuter votre application Android.

Vous pouvez maintenant saisir un numéro de portable souhaité et un SMS à envoyer sur ce numéro. Enfin cliquez surSend SMSbouton pour envoyer votre SMS. Assurez-vous que votre connexion GSM / CDMA fonctionne correctement pour envoyer votre SMS à son destinataire.

Vous pouvez prendre un certain nombre de SMS séparés par des virgules, puis à l'intérieur de votre programme, vous devrez les analyser dans une chaîne de tableau et enfin vous pouvez utiliser une boucle pour envoyer un message à tous les numéros donnés. C'est ainsi que vous pouvez écrire votre propre client SMS. La section suivante vous montrera comment utiliser le client SMS existant pour envoyer des SMS.

Utilisation de l'intention intégrée pour envoyer des SMS

Vous pouvez utiliser Android Intent pour envoyer des SMS en appelant la fonctionnalité SMS intégrée d'Android. La section suivante explique les différentes parties de notre objet Intent requises pour envoyer un SMS.

Objet d'intention - Action pour envoyer un SMS

Vous utiliserez ACTION_VIEWaction pour lancer un client SMS installé sur votre appareil Android. Voici une syntaxe simple pour créer une intention avec l'action ACTION_VIEW.

Intent smsIntent = new Intent(Intent.ACTION_VIEW);

Objet d'intention - Données / Type pour envoyer des SMS

Pour envoyer un SMS, vous devez spécifier smsto: comme URI en utilisant la méthode setData () et le type de données sera vnd.android-dir/mms-sms en utilisant la méthode setType () comme suit -

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

Objet d'intention - Extra pour envoyer des SMS

Android a un support intégré pour ajouter un numéro de téléphone et un message texte pour envoyer un SMS comme suit -

smsIntent.putExtra("address"  , new String("0123456789;3393993300"));
smsIntent.putExtra("sms_body"  , "Test SMS to Angilla");
Ici, l'adresse et sms_body sont sensibles à la casse et doivent être spécifiés en petits caractères uniquement. Vous pouvez spécifier plusieurs nombres dans une seule chaîne, mais séparés par un point-virgule (;).

Exemple

L'exemple suivant vous montre en pratique comment utiliser l'objet Intention pour lancer le client SMS afin d'envoyer un SMS aux destinataires donnés.

Pour expérimenter cet exemple, vous aurez besoin d'un appareil mobile équipé du dernier système d'exploitation Android, sinon vous devrez lutter avec un émulateur qui pourrait ne pas fonctionner.
Étape La description
1 Vous utiliserez l'IDE de studio Android pour créer une application Android et la nommerez comme tutorialspoint sous un package com.example.tutorialspoint .
2 Modifiez le fichier src / MainActivity.java et ajoutez le code requis pour prendre en charge l'envoi de SMS.
3 Modifiez le fichier XML de mise en page res / layout / activity_main.xml, ajoutez un composant GUI si nécessaire. J'ajoute un simple bouton pour lancer le client SMS.
4 Inutile de définir des constantes par défaut, Android Studio s'occupe des constantes par défaut.
5 Modifiez AndroidManifest.xml comme indiqué ci-dessous
6 Exécutez l'application pour lancer l'émulateur Android et vérifiez le résultat des modifications effectuées dans l'application.

Voici le contenu du fichier d'activité principal modifié 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;
   }
}

Voici le contenu de res/layout/activity_main.xml fichier -

Ici abc indique le logo 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>

Voici le contenu de res/values/strings.xml pour définir deux nouvelles constantes -

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

Voici le contenu par défaut de 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>

Essayons d'exécuter votre tutorialspointapplication. Je suppose que vous avez connecté votre appareil mobile Android à votre ordinateur. Pour exécuter l'application à partir du studio Android, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Avant de démarrer votre application, Android studio affichera la fenêtre suivante pour sélectionner une option dans laquelle vous souhaitez exécuter votre application Android.

Sélectionnez votre appareil mobile en option, puis vérifiez votre appareil mobile qui affichera l'écran suivant -

Maintenant, utilisez Compose SMS bouton pour lancer les clients SMS intégrés Android qui est montré ci-dessous -

Vous pouvez modifier l'un des champs par défaut donnés et enfin utiliser le bouton d'envoi de SMS pour envoyer votre SMS au destinataire mentionné.