Skip to content

8 septembre 2010 | Rédigé par Axon

30

Utiliser les notifications pour avertir l’utilisateur [Tutoriel Android n°17]

Après un long petit moment d’absence me revoilà avec un nouveau tutoriel Android. Un des points fort des téléphones Android par rapport à l’iPhone est son système de notifications. Nous allons donc apprendre à créer une notification qui apparaitra en faisant vibrer votre téléphone. C’est très utile pour avertir l’utilisateur (par exemple pour nous prévenir que l’on reçoit un message, une notification se déclenche).

Donc pour commencer, créez votre projet Android (pour moi comme à mon habitude j’utilise la version 1.6 d’Android) et nous allons tout de suite créer la mini interface graphique de notre application. Elle se compose simplement de deux boutons. Voici à quoi ressemblera notre application une fois terminée:

Code XML

Bon je me demande si je dois vous donner le code pour une si simple interface graphique? ;) Allez pour les plus faignants il n’y aura qu’un petit copier/coller à faire, voici le code :

<?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"
    android:gravity="center"
    >
<Button  
    android:id="@+id/CreateNotif"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Créer une notification"
    />
 
<Button  
    android:id="@+id/ClearNotif"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Supprimer la notification"
    />
 
</LinearLayout>

Code JAVA

Nous allons travailler avec deux Activity. L’Activity principale sera celle contenant nos deux boutons et qui nous permettra de créer ceux pourquoi nous sommes ici, c’est à dire une notification. Le bouton « Créer une notification » créera donc une notification et le bouton « Supprimer la notification » supprimera la notification. Bon ça je pense que vous l’auriez trouvé sans moi… Mais alors pourquoi avoir besoin d’une autre Activity? Et bien tout simplement lorsque l’on cliquera sur notre notification apparaissant dans la liste des notifications, cela nous emmènera vers un nouvel écran de notre application, tout en supprimant automatiquement la notification qui a été créé.

Allez fini le blabla voici le code commenté de l’Activity principale :

package com.tutomobile.android.notification;
 
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class Tutoriel16_Android extends Activity {
 
	// On définit une variable global qui sera
	// l'id unique correspondant à notre notification (bon moi j'ai choisi ma date de naissance :P)
	public static final int ID_NOTIFICATION = 1988;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // On récupère nos deux boutons créer en XML grâce à leur id
        Button boutonCreateNotif = (Button) findViewById(R.id.CreateNotif);
        Button boutonClearNotif = (Button) findViewById(R.id.ClearNotif);  
 
        //On applique un écouteur d'évènement à notre bouton "Créer une notification"
        boutonCreateNotif.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				//on lance la méthode createNotify (qui comme son nom l'indique créera la notification)
	        	createNotify();
			}
		});
 
        //On applique un écouteur d'évènement à notre bouton "Supprimer la notification"
        boutonClearNotif.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				//on lance la méthode cancelNotify (qui supprimera la notification de la liste des notifications)
				cancelNotify();
			}
		}); 
 
    }
 
    //Méthode qui créer la notification
    private void createNotify(){
    	//On créer un "gestionnaire de notification"
    	NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);        
 
    	//On créer la notification
    	//Avec son icône et son texte défilant (optionel si l'on veut pas de texte défilant on met cet argument à null)
    	Notification notification = new Notification(R.drawable.icon, "Toc toc, c'est une notification !", System.currentTimeMillis());  
 
    	//Le PendingIntent c'est ce qui va nous permettre d'atteindre notre deuxième Activity
    	//ActivityNotification sera donc le nom de notre seconde Activity
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, ActivityNotification.class), 0);
        //On définit le titre de la notif
        String titreNotification = "C'est moi la notification !";
        //On définit le texte qui caractérise la notif
        String texteNotification = "Je suis une belle notification...";         
 
        //On configure notre notification avec tous les paramètres que l'on vient de créer
        notification.setLatestEventInfo(this, titreNotification, texteNotification, pendingIntent);
        //On ajoute un style de vibration à notre notification
        //L'utilisateur est donc également averti par les vibrations de son téléphone
        //Ici les chiffres correspondent à 0sec de pause, 0.2sec de vibration, 0.1sec de pause, 0.2sec de vibration, 0.1sec de pause, 0.2sec de vibration
        //Vous pouvez bien entendu modifier ces valeurs à votre convenance
        notification.vibrate = new long[] {0,200,100,200,100,200};
 
        //Enfin on ajoute notre notification et son ID à notre gestionnaire de notification
        notificationManager.notify(ID_NOTIFICATION, notification);
    }
 
    //Méthode pour supprimer de la liste de notification la notification que l'on vient de créer
    private void cancelNotify(){
    	//On créé notre gestionnaire de notfication
    	NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    	//on supprime la notification grâce à son ID
    	notificationManager.cancel(ID_NOTIFICATION);
    }
}

Créez ensuite une nouvelle classe Java, qui sera notre seconde Activity. Moi je l’ai appelé ActivityNotification . Le code de cette Activity est très simple mais tout de même commenté, le voici :

package com.tutomobile.android.notification;
 
import android.app.Activity;
import android.app.NotificationManager;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
 
public class ActivityNotification extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
 
		//On créer un TextView en Java
		TextView txt=new TextView(this);
		txt.setText("Voici à l'Activity qui apparait lorsque l'on clique sur la notification !");
 
		//On ajoute notre TextView à la vue
		setContentView(txt);
 
		//On supprime la notification de la liste de notification comme dans la méthode cancelNotify de l'Activity principale
		NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
		notificationManager.cancel(Tutoriel16_Android.ID_NOTIFICATION);
	}
}

Une fois tout ceci fait il ne reste plus qu’à faire une petit modification dans le fichier AndroidManifest.xml.

AndroidManifest.xml

Il n’y a que deux petites choses à rajouter, l’autorisation pour faire vibrer le téléphone, ainsi que la déclaration de la nouvelle Activity que l’on a crée.

Il faut donc ajouter ceci entre les balises <application> déjà existantes :

<activity android:name=".ActivityNotification" 
	     android:label="@string/app_name" />

Puis ajouter ceci juste avant la balise fermante </manifest> déjà existante également :

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

Voilà c’est terminé. Normalement si vous lancez votre application pour pourrez cliquer sur le bouton « Créer une notification » vous verrez apparaître la notification dans la barre de notification en même temps que votre téléphone vibrera. Si vous faîtes glisser la barre de notification vers le bas pour avoir une vue plus détaillée des notifications en cours, lorsque vous cliquerez sur votre notification, la nouvelle Activity va s’afficher et la notification aura disparu. Enfin bon je vous laisse jouer et découvrir par vous même, ce n’est pas très difficile.

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

Encore un peu de lecture :

30 Commentaires Poster un commentaire
  1. AMaX
    9 sept 2010

    Salut, je débarque dans le monde de JAVA et les tutos Android sont encore très rares. Merci beaucoup pour ce blog !

  2. 10 sept 2010

    @AMaX : de rien ! ;)

  3. hmouz
    10 sept 2010

    Merci pour ce nouveau tuto Axon claire et simple,comme dab.
    Je voudrais te demander si tu peux créer un tuto sur comment créer un client soap avec une app android.J’y suis presque mais je suis bloqué dans quelque petit réglage.

  4. 10 sept 2010

    @hmouz : je vais voir ce que je peux faire pour toi ! ;)

  5. hmouz
    10 sept 2010

    ça y est j’y suis arrivé concernant les WS,un tout petit oubli m’a couté plus de 3h.Si tu y es intéresse je te passe les sources si tu veux faire un tuto.

  6. lucianot54
    11 sept 2010

    Faut que je test le tuto la, j’ai une appli qui aurai besoin de ça :D . Sinon ça serai sympa que tu mettes les sources des applications ne plus du code :)

  7. Jul'
    12 sept 2010

    Très bon tutoriel, merci !

    Petite question : est-ce que tu saurais comment lancer une notification à une date ultérieure précise ? (genre un système de rappel…)

    Si tu n’as pas le temps de décrire précisément la marche à suivre, aurais-tu au moins des liens qui me l’expliqueraient ?

    Merci d’avance !

  8. lucianot54
    12 sept 2010

    @Jul’ Essaye de faire un système d’alarme. A la place de mettre le reveil avec le son, tu mets le code pour exécuter la notification.

    J’ai trouvé un tuto d’un reveil :
    http://android-france.fr/tag/alarm/

    En gros, je pense que la class AlarmManager peut t’aider.

    En espérant t’aider.

  9. 12 sept 2010

    @lucianot54: Merci d’avoir répondu à Jul’ même si Android-France est down en ce moment ;) Sinon je ne t’ai pas oublié t’inquiète pas…

    @Jul’: pour l’instant je ne serais pas te répondre donc test éventuellement ce que lucianot54 t’a donné. Si je trouve ton bonheur je te tiens au courant !

  10. lucianot54
    12 sept 2010

    @axon T’en que tu es la, ça serait pas mal d’avoir les dernier commentaire posté dans la colonne de droite.
    Sinon je sais pas si tu as eu le temps regarder pour afficher une interface avec le BBCode pour les commentaire.

  11. 12 sept 2010

    @lucianot54 : Pour les commentaires c’est noté se sera présent dans le prochain design du site (que je suis actuellement en train de faire… pfiou pas facile) et pour le BBCode je n’ai pas encore cherché mais si tu as quelque chose n’hésite pas à me le communiquer ! ;)

  12. cad13
    13 sept 2010

    Salut Axon,

    D’abord pour Jul’, je confirme qu’il faut qu’il passe par une alarme et un onReceive dans son appli qui va afficher la notification.

    Ensuite pour ton tuto, si tu as l’info (je n’ai pas trouvé de mon côté), je voulais savoir comment faire pour qu’une même appli puisse afficher plusieurs notifications distinctes (lorsque je créé une nouvelle notification, cela efface la précédente…).

    Et aussi, sais-tu comment déclencher du code lorsque l’on appuie sur la notification ? (l’effacer par exemple, ou afficher des infos supplémentaires)

    Merci.

  13. lucianot54
    14 sept 2010

    J’ai recopié le code et je n’arrive pas à afficher l’activité ActivityNotification :s

  14. AndroidFroyoMan
    17 sept 2010

    Merci à toi @Axon pour tes tutos clairs et simples.
    J’aurai juste un petit souhait à te formuler est-ce que tu pourrai faire des tutos pour android froyo (2.2).

    Car d’après ce que j’ai pu remarquer les tutos pour android 1.6 ne fonctionne pas sur android 2.2.

    Continu tu fais du très bon travail.

  15. 17 sept 2010

    @AndroidFroyoMan : Merci pour tes encouragements ! Sinon c’est étrange que les appli/tutos en 1.6 ne tourne pas sur 2.2, c’est plutôt l’inverse normalement… C’est justement pour cela que je fais les tutos en 1.6 pour qu’il puisse fonctionner sur toutes les versions égales ou supérieurs. Si je fait des tutos en 2.2, je risque d’utiliser des choses propre à la version 2.2 et cela ne fonctionnera pas sur les autres versions (inférieurs)

  16. 14 oct 2010

    Salut

    est-ce que tu pourrais nous montrer (lorsque tu auras du temps) comment faire une notification avec un service donc sans activity

    Merci

  17. boleofr
    19 oct 2010

    +1 pour le mode service et les notifications

  18. 19 oct 2010

    @lordfatal et @boleofr : je vais y songer alors ! ;)

  19. dali
    10 jan 2011

    salut Axon merci pour vos super tutos j’aimerai savoir comment créer un texte défilant

  20. bill
    16 fév 2011

    J’ai comme sujet de projet de fin d’étude ‘’Développent d’une application de gestion de courrier sur Android’’

    c-à-dire on va faire un courrier électronique cote client cote serveur existe déjà

    Les protocoles utiliser SOAP et WSDL

    l’environnement qui en va utiliser c’est Eclipse

    Pourriez-vous m’aider?

    Merci d’avance.

  21. J0hnD0e
    30 mar 2011

    Tu dois donc avoir à disposition quelques webservices à appeller. Genre envoyer un mail, lire les mails,…

    Moi, je ferais une première vue avec la liste des mails reçu (juste l’objet et sa provenance) et la deuxième les détails du mail avec la possibilité de répondre.

    Les appels aux webservices sont à faire dans un autre thread, je te conseilles les asynctask.

    Quelles sont les difficultés que tu rencontres ?

    https://twitter.com/j0hnd0e42

  22. homer
    9 avr 2011

    Je sais que ce tuto commence à dater mais je commence la programmation sur android… (j’ai commencé par le java).

    J’ai suivi ce tuto à la lettre et les refaits deux fois mais ne trouve pas de solution à mon erreur!

    Lors du lancement éclipse me dit :

    WARNING: Application does not specify an API level requirement!
    Device API version is 8 (Android 2.2)

    Je suppose qu’il manque quelque chose… Mais quoi??!!??
    Aucune erreur ne m’est signalé! Toutefois une fois l’émulateur lancer j’ai une application qui se nomme Notification et quand je clic dessus j’obtiens ce qui est censé arrivé après la notification!

    Merci d’avance!

  23. J0hnD0e
    10 avr 2011

    C’est juste que dans ton fichier Manifest.xml, tu n’as pas spécifié quelle version du SDK tu utilisais.

    Ajoute ceci :

    Tu peux également jeter un oeil sur la doc de Google : http://developer.android.com/guide/appendix/api-levels.html

    Dis moi si ça règle le problème du warning.

  24. J0hnD0e
    10 avr 2011

    Dsl, la balise xml a été ignorée dans le précédent commentaire..

  25. J0hnD0e
    10 avr 2011

    &lt uses-sdk
    android:minSdkVersion= »8″ /&gt

  26. J0hnD0e
    10 avr 2011

    < uses-sdk
    android:minSdkVersion= »8″ / >

  27. Mc Flurry
    10 mai 2011

    Bonjour,

    J’ai une question, dans ce tuto après le clic sur la notification, on affiche du texte dans notre application, mais commet faire pour par exemple afficher un Toast sur l’écran menu ou simplement celui dans lequel on se trouve?

  28. Riadh
    22 jan 2012

    Merci Axon pour ce Blog,je veux savoir comment envoyer une notification de mon application JEE a android .merci

  29. haroun
    8 mar 2012

    je t’encourage

Trackbacks & Pingbacks

  1. Les tweets qui mentionnent Comment utiliser les notifications sous Android | Tuto Mobile -- Topsy.com

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