Skip to content

16 décembre 2010 | Rédigé par Axon

29

Envoyer un SMS [Tutoriel Android n°21]

Voici un nouveau tutoriel Android (depuis bien longtemps les plus exigeants d’entre vous diront… ;) ).  C’est un lecteur de Tuto Mobile qui me l’a envoyé, il s’agit de dia100daly, donc merci à lui. Dans ce tutoriel nous allons apprendre à envoyer des SMS. Peut être qu’un jour vous aurez envie de faire une application qui envoie des SMS qui sais. C’est toujours bien de savoir  comment faire (en plus cela sera nécessaire pour le prochain tutoriel) :P Enfin trêve de bavardage.

Commençons par créer un projet avec la version 1.6 d’Android pour être conforme à tous les autres tutoriels Android du site. Pour ma part il s’appelle EnvoieSms avec une activité qui porte le même nom (vous pouvez l’appelé comme vous voulez).

Code XML

Avant de vous donner le code XML que nous allons utiliser pour faire l’interface graphique, je vais vous montrer le rendu que l’on souhaite à la fin :

Donc pour obtenir cette petite interface très simple voici le code XML correspondant :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<LinearLayout android:orientation="horizontal"
		android:layout_width="fill_parent" android:layout_height="wrap_content">
		<TextView android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:text="@string/numero" />
		<EditText android:id="@+id/numero" android:layout_width="fill_parent"
			android:layout_height="wrap_content" />
	</LinearLayout>
	<TextView android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="@string/message" />
	<EditText android:id="@+id/message" android:layout_width="fill_parent"
		android:layout_height="200sp" />
	<Button android:id="@+id/envoyer" android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="@string/envoyer" />
</LinearLayout>

Pas de panique si vous avez des erreurs c’est parce que vous n’avez pas créé les ressources String. Créez les ressources qu’il faut dans le fichier String.xml comme ceci :

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string name="numero">Numero</string>
	<string name="app_name">Envoie Sms</string>
	<string name="message">Message</string>
	<string name="envoyer">Envoyer</string>
</resources>

Code JAVA

Nous allons maintenant mettre en place le mécanisme d’envoi de SMS. Pour cela nous avons juste besoin d’utiliser un objet de type SmsManager.

Sans plus tarder éditons notre activité de départ EnvoieSms et insérer le code Java (commenté) suivant:

package com.sdiawara.envoiesms;
 
import android.app.Activity;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class EnvoieSms extends Activity {
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //On récupère le bouton créer en XML grâce à son id
        Button btnEnvoie = (Button)findViewById(R.id.envoyer);
        //On récupère les deux EditText correspondant aux champs pour entrer le numéro et le message
        final EditText numero =(EditText)findViewById(R.id.numero);
        final EditText message = (EditText)findViewById(R.id.message);
        //On affecte un écouteur d'évènement au bouton
        btnEnvoie.setOnClickListener(new OnClickListener() {
 
			@SuppressWarnings("deprecation")
			public void onClick(View v) {
				//On récupère ce qui a été entré dans les EditText
				String num = numero.getText().toString();
				String msg = message.getText().toString();
				//Si le numéro est supérieur à 4 charactère et que le message n'est pas vide on lance la procédure d'envoi
				if(num.length()>= 4 && msg.length() > 0){
					//Grâce à l'objet de gestion de SMS (SmsManager) que l'on récupère grâce à la méthode static getDefault()
					//On envoit le SMS à l'aide de la méthode sendTextMessage
					SmsManager.getDefault().sendTextMessage(num, null, msg, null, null);
					//On efface les deux EditText
					numero.setText("");
					message.setText("");
				}else{
					//On affiche un petit message d'erreur dans un Toast
					Toast.makeText(EnvoieSms.this, "Enter le numero et/ou le message", Toast.LENGTH_SHORT).show();
				}
 
			}
		});
    }
}

AndroidManifest.xml

Voilà nous avons presque fini il nous reste juste à demander la permission d’envoyer des messages. Pour cela ouvrez le fichier AndroidManifest.xml et ajoutez cette ligne :

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

Vous pouvez maintenant tester. Pour bien voir que ça marche nous allons utiliser deux émulateurs. Je suppose que vous en disposer déjà d’un , nous allons donc en créer un deuxième. Cliquez sur le menu Windows >>> Android SDK and AVD Manager. Ensuite cliquez sur New pour créer un nouvel émulateur, donnez lui le nom que vous voulez, cliquez sur Create AVD et sélectionnez ce nouvel émulateur puis cliquez sur Start. Il ne reste plus qu’a lancer votre projet avec l’un des émulateurs et à rentrer le numéro qui apparaît sur l’autre émulateur comme numéro du destinataire. Voilà tout devrait marcher normalement !

A bientôt pour un prochain tutoriel. :D

Découvrez d'autre articles de la catégorie Tutoriels Android

Encore un peu de lecture :

29 Commentaires Poster un commentaire
  1. Kakulukian
    17 déc 2010

    Une erreur d’encodage s’est glissée dans le code Java :)

  2. 17 déc 2010

    Yes merci c’est corrigé ;)

  3. Eskimon
    22 déc 2010

    Sur ta première capture d’écran, le nom de l’application ne correspond pas au nom rentré dans le code XML (« Send SMS » au lieu de « Envoi SMS ») ;)

    Blague à part, félicitations !

    Un grand merci pour prendre le temps de nous faire partager tes connaissances (et comme ça j’en apprend toujours plus :) )!

  4. 22 déc 2010

    @Eskimon : Effectivement tu as raison, mais bon ce n’est pas très grave. En tout cas merci pour tes encouragements ! ;)

  5. fixbug
    28 déc 2010

    Génial ces tutos.
    Je passe ici régulièrement pour avancer dans mon apprentissage.
    Merci et encore et encore plus des tutos ;-)

  6. s4t
    9 jan 2011

    Merci pour le tuto.
    A noter que la classe android.telephony.gsm.SmsManager est dépréciéz. Il faut utiliser : import android.telephony.SmsManager;

    Et pensez à enlever l’annotation @SuppressWarnings(« deprecation ») dans ce cas.

  7. 3 mar 2011

    Bonjour,

    et voilà encore un tutoriel bien sympa.
    Il est évidement que l’on doit chercher par nous même, mais avec ce que tu nous présentes est il possible de cliquer dans le txtview ‘numéro’ et qu’une fenêtre choix de contact s’affiche ?

  8. imfloflo
    28 mar 2011

    Est ce que cette API peut gérer l’envoi de sms class 0 ou sms flash , qui s’affichent chez le destinataire sous forme de popup ?

  9. Kristopher64
    2 avr 2011

    Salut,
    J’aimerai savoir comment envoyer un SMS qui n’est pas visible par le destinataire.
    Je sais, cela peut paraitre très bizarre, mais c’est pour un projet.

    Donc, pour résumer :

    1. Le GSM de l’expediteur envoi un Sms.
    2. Le GSM Du destinataire reçois le SMS mais ne voit pas qu’il vient de reçevoir un SMS.
    3. Je reçois l’accusé de reception.

    Merci d’avance.

    Kristopher64

  10. echo²
    13 avr 2011

    Salut,

    C’est sympa comme p’tit tuto mais il est dommage d’avoir enlever ce qui fait le coté pratique de sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) .. c’est à dire les 2 PendingIntent qui permet de gérer l’émission effective du SMS et la réception du message par le destinataire … ça aurait pu être utile !
    Ca répond à ta question Kristopher64 ;o)

    @+

  11. Kristopher64
    14 avr 2011

    Un grand merci echo² , je vais tester :D

  12. lindas
    30 avr 2011

    Ce tuto est vraiment génial .Mais je voudrais vous dire que je reçois rien dans l’écran du destinataire ,j’ai suivi tous les étapes pas à pas .
    Merci

  13. echo²
    10 mai 2011

    Salut Linda,

    Quand tu dis que tu ne vois rien sur l’écran du destinataire ça veut dire que tu ne vois même pas la notification ?
    As-tu essayé avec la vue DDMS de ton Eclipse d’envoyer un SMS avec l’ »Emulator Control » ?
    Si oui obtiens tu quelque-chose ?
    Si non est ce que t’es 2 émulateurs ont bien le p’tit logo en haut a droite qui dit que tu as le réseau … ouai je sais c’est bête mais je me suis aperçu plusieurs fois que de temps en temps l’émulateur n’avait pas de réseau … bah ouai c’est nase mais c’est comme ça lol

    On va peut être trouver pourquoi tu as se comportement bizarre en cherchant un peu ;o)

  14. didi2204
    18 mai 2011

    Je n’ai pas compris comment utiliser l’outil SMSManager.
    Pouvez-vous m’expliquer?

  15. C'est assez simple tu met le numéro
    19 mai 2011

    Pour l’utiliser c’est pas très compliqué tu vas dans le vue DDMS une fois que tu y est tu clique sur l’émulateur que tu veux utiliser pour le mettre en surbrillance.
    Une fois que tu as fais ça tu vas vers le SMSManager et tu mets un numéro valide (perso je mets un numéro genre 5555) après tu cliques la puce SMS (sinon tu vas émettre un coup de fil). Tu renseignes un message et tu appuis sur envoyé et voila ;o)

    Si vraiement tu n’y arrive pas tu as le moyen 2 qui est :
    Tu te connectes sur l’émulateur en faisant telnet localhost –> c’est le numéro de ton émulateur écrit en haut à gauche)
    et après tu fais : sms send

    J’espère que ça t’aide … si c’est pas le cas j’essaierai de t’expliquer autrement ;)

    @+

  16. Zaidar
    4 juin 2011

    Bonjour, merci pour ce tutoriel tres tres interressant.
    Je pense avoir bien compris et bien progressé, cependant, Eclipse m’indique toujours une erreur pour  » btnEnvoie.setOnClickListener(new OnClickListener() {
     »

    ll dit que la methode dans le type View n’est pas applicable pour les arguments, alors que cela correspond a ce qui est dans le tuto. Encore merci d’avance pour tout,
    Cordialement.

  17. haider
    5 juin 2011

    Bonjour j’aimerai avoir votre aide
    je voulais savoir la signification de SavedInstanceState

    Merci de votre

  18. legenidt
    10 juin 2011

    Bonjour, je vous salut pour le travail que vous abbatez pour nous et que DIEU vous benie.
    S’il vous pais j’ai essayer les codes que vous nous avez donner pour l’envoie d’un SMS sous android , mais j’ai des eureurs qui m’est signale par le IDE .
    Dans le fichier main.xml à la ligne 5 et 9 respectivemet ,j’ai les messages suivants :
    -error : No resource identifier found for attribute ‘orietation’ in package ‘android’
    -error : No resource identifier found for attribute ‘layout_heigt’ in package ‘android’.
    Mais avant cela tous allait bien ;ainsi une fois l’application lance tanto ça marchait ,tanto ça m’affichait le message suivat :
    force clause………….
    Mais je suis aller chercher la cause dans la fenetre LogCat et j’ai trouve :
    -Caused buy :android.os.DeadobjetException.
    Voila mes preocupations s’il vous plait aider moi .

  19. Chaouiki
    23 sept 2011

    Salut,

    quelqu’un pourrait m’aider car plusieurs fois je suis les instructions et je n’arrive pas a faire fonctionner cette application.

    D’une part j’ai plein d’erreur et 2ement l’appli crash !

    merci

  20. Lol
    12 déc 2011

    Salut à tous,
    Le tuto est génial mais il y a une question que je pose depuis longtemps :
    Ce tuto « Envoyer un Sms » permet seulement d’envoyer un message entre 2 émulateurs ou bien elle peut envoyer un sms à partir de l’émulateur à un téléphone mobile ayant android

    Merci pour vos réponse

  21. Tpo76
    19 déc 2011

    Salut a tousse, j’ai un petit problème j’essaye de mettre le ligne
    SmsManager.getDefault().sendTextMessage(num, null, msg, null, null);
    dans une boucle for afin d’effectuer un envoie massif de sms (Aucune utilité, mais je suis curieux)
    le programme ne repère aucune erreur mes les sms ne vont nul part…

    Et de plus chez moi le mot « SmsManager » est barré c’est normal ??

    Cela peut venir du fait que j’utilise mon propre portable comme terminal d’essai et nom un émulateur ?

    Sinon le programme marche réellement entre 2 mobile pour répondre à la question précédente mais avec l’envoie d’un seul sms

  22. Guest_
    15 jan 2012

    Bonjour à tous,
    J’aimerai savoir ce qu’il faut modifier dans le code pour envoyer des messages PDU ou flash.

    Merci d’avance pour votre réponse.

    Kris64

  23. Sofiene
    19 mar 2012

    Bonjour, j’ai essayé le code mais ça n’ a pas marché
    je vois le message suivant:
    The type SmsManager is deprecated

  24. smobydick
    29 mai 2012

    Bonjour,

    je voudrais que le message commence au début de l’edit text, mais je n’y arrive pas ! apparement meme sur le tuto le corps du message commence au milieu ! pourquoi?

  25. David
    2 juil 2012

    Bonjour j’ai un petit probleme.Comment utiliser les PendingIntent pour envoyer et recevoir réellement un message sur un portable réel?
    Voici la méthode:
    sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent);
    Merci de votre aide

  26. afif
    27 déc 2012

    bonjour
    j’ai essayé ce code, quand il n’y pa de sim dans le telephone, une exception n’est pas levé, j’ai un sms sent;
    comment je pe fair pour savoir s’il y’a une carte sim ou pas??

  27. boubacar
    16 mar 2013

    Bonjour , j’ai mis ces codes, sans aucune erreurs, j’ai bien vérifier les ligne par ligne mais j’ai toujours des des erreur sur ma classe java au niveau des Id
    setContentView(R.layout.main);
    final EditText numero =(EditText)findViewById(R.id.numero);
    final EditText message = (EditText)findViewById(R.id.message);

    et jarrive pas a executer l’application sur mon emulateur. Besoin d’aide SVP

  28. boubacar
    16 mar 2013

    le probleme de ID est réglé la on m’affiche ce message d’erreur
    W/ResourceType( 5696): Bad XML block: header size 98 or total size 0 is larger than data size 0

    Que dois je faire

Trackbacks & Pingbacks

  1. Tuto développement Android : Envoyer un SMS

Une question, une suggestion, une opinion? Partagez ce que vous pensez, laissez un commentaire.

(obligatoire)
(obligatoire)

Note: Votre adresse email ne sera jamais publiée.

Suivez les réponses aux commentaires