Le service de messagerie SMS (Short Message Service) permet de transmettre de courts messages textuels.
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>
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>