SMS

Introduction

Le service de messagerie SMS (Short Message Service) permet de transmettre de courts messages textuels.

AndroidManifest.xml

Il faut ajouter la permission d’envoyer des messages SMS dans le fichier AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplicationsms">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>
    </application>

</manifest>

Tests

Il y a deux solutions pour envoyer un SMS via une application Android :

  • utiliser la classe SmsManager pour gérer les opérations SMS. On récupère une instance en appelant la méthode statique getDefault() puis on appelle ma méthode sendTextMessage()

  • utiliser un intent et laisser le système trouver l’application capable d’envoyer le SMS

Pour l’exemple, on crée une simple application avec deux boutons : le bouton Alerter enverra un SMS via un intent et le bouton Envoyer utilisera SmsManager pour faira la même la chose. On ajoute deux EditText pour la saisie du numéro et du message.

public class MainActivity extends AppCompatActivity
{
    private final String TAG = "SMS";
    private EditText numeroSMS;
    private EditText messageSMS;
    private Button envoyerSMS;
    private Button alerterSMS;

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

        numeroSMS = (EditText)findViewById(R.id.numeroSMS);
        messageSMS = (EditText)findViewById(R.id.messageSMS);
        envoyerSMS = (Button)findViewById(R.id.envoyerSMS);
        alerterSMS = (Button)findViewById(R.id.alerterSMS);

        envoyerSMS.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                String numero = numeroSMS.getText().toString();
                String message = messageSMS.getText().toString();

                if(!numero.isEmpty() && !message.isEmpty())
                {
                    SmsManager.getDefault().sendTextMessage(numero, null, message, null, null);
                    numeroSMS.setText("");
                    messageSMS.setText("");
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "Il faut un numéro et un message !", Toast.LENGTH_SHORT).show();
                }
            }
        });
        alerterSMS.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                Intent intentSMS = new Intent(Intent.ACTION_SENDTO);

                intentSMS.addCategory(Intent.CATEGORY_DEFAULT);
                intentSMS.setType("vnd.android-dir/mms-sms");
                intentSMS.putExtra("sms_body", "Alerte !");
                intentSMS.setData(Uri.parse("sms:"));

                startActivity(intentSMS);
            }
        });
    }
}

Le layout utilisé dans cet exemple sera le suivant :

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/layoutNumeroSMS"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toTopOf="@+id/layoutMessageSMS"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:id="@+id/texteNumeroSMS"
            android:text="Numéro : "
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <EditText
            android:id="@+id/numeroSMS"
            android:inputType="phone"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layoutMessageSMS"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="200sp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toTopOf="@+id/layoutBoutonsSMS"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/layoutNumeroSMS" >

        <TextView
            android:id="@+id/texteMessageSMS"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Message : " />

        <EditText
            android:id="@+id/messageSMS"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
             />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/layoutBoutonsSMS"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/layoutMessageSMS">

        <Button
            android:id="@+id/alerterSMS"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:text="Alerter" />

        <Button
            android:id="@+id/envoyerSMS"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:text="Envoyer" />

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

© Thierry Vaira <tvaira@free.fr>