I. Les notifications

Android intègre dans son coeur un système de notifications. Celui-ci permet d'avertir l'utilisateur s'il reçoit une information importante. Vous pouvez rajouter une sonnerie et une vibration, ainsi que le clignotement des leds disponibles sur le téléphone.

Mais je préfère vous mettre en garde contre l'utilisation massive de ce système dans vos applications. Une notification doit rester un avertissement pour l'utilisateur, une information importante qu'il ne doit pas manquer (batterie faible, réception d'un SMS, etc), mais cela ne doit pas être utilisé pour dire un simple « Bonjour, l'application est lancée ». Alors, utilisez ce système à bon escient.

II. Aperçu d'une notification

Si vous ne voyez pas ce qu'est une notification, je vais vous montrer un exemple :

Image non disponible

Cet exemple montre une notification pour un SMS. on y retrouve une icône, un titre, sa description et l'heure de la réception de la notification.

III. Création de notre propre notification

Nous allons commencer par créer un nouveau projet (1.6 ou autres), puis nous allons nous concentrer sur la création de la notification.

Tout d'abord, le système de notification se fait par le biais d'un service intégré à notre OS Mobile, nommé « NOTIFICATION SERVICE ». Pour le récupérer, nous allons utiliser la méthode getSystemService et stocker le service dans un NotificationManager.

Créons une variable privée de type NotificationManager, nommée notificationManager dans notre classe.

 
Sélectionnez

private NotificationManager notificationManager;

Puis, récupérons le service dans la méthode onCreate de notre activité :

 
Sélectionnez

notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

Désormais, nous pouvons accéder au système de notification d'Android. Pour le moment, rien de plus simple, mais ça va se corser.

Nous allons rajouter un bouton à notre application, que l'on va nommer « boutonNotification». Nous allons nous retrouver avec quelque chose comme ceci :

 
Sélectionnez

private NotificationManager notificationManager;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

final Button boutonNotification = (Button) findViewById(R.id.boutonNotification);

boutonNotification.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// Traitement de la notification

}

});

}

Pour commencer, nous allons utiliser la classe notification :

 
Sélectionnez

Notification(int icon, CharSequence tickerText, long when)

Paramètres :

  • icon  Image utilisée pour la notification (Drawable) ;
  • tickerText  Texte qui suivra l'icône dans la barre de notifications lors de son déclenchement ;
  • when  Quand est-ce que la notification s'est déclenchée.

Voici ce que l'on va mettre dans notre déclaration :

Notification notification = new Notification(R.drawable.icon, "Mon appli", System.currentTimeMillis());

Ce n'est pas tout, car actuellement nous ne pouvons pas l'afficher, il manque encore des choses importantes.

La plupart du temps, une notification s'affiche, mais l'application n'est pas au premier plan. Il est idéal de rediriger l'utilisateur vers l'activité concernée lorsqu'il clique sur la notification.

Imaginons que nous voulons passer un coup de téléphone avec cette notification, nous allons rajouter un Intent tout simple comme nous avons l'habitude de faire :

 
Sélectionnez

Intent intentNotification = new Intent(Intent.ACTION_VIEW,Uri.parse("tel:0102030405"));

Voilà, notre Intent est prêt pour ouvrir notre gestionnaire téléphonique.

Nous allons rajouter un PendingIntent ( http://developer.android.com/reference/android/app/PendingIntent.html ) qui transmettra notre notification au système.

 
Sélectionnez

PendingIntent pendingIntent = PendingIntent.getActivity(MonActivite.this, 0, intentNotification, 0);

Paramètres :

  • le contexte de l'application ;
  • le code de requête ;
  • la notification à transmettre ;
  • et les drapeaux.

Ensuite, nous allons rajouter des informations à notre notification grâce à la méthode setLatestEventInfo :

 
Sélectionnez

notification.setLatestEventInfo(MonActivite.this, "Ma notification", "Passer un appel", pendingIntent);

Paramètres :

  • le contexte de l'application ;
  • le titre de la notification ;
  • la description ;
  • le PendingIntent.

Et pour finir, on envoie tout cela à notre manager :

 
Sélectionnez

notificationManager.notify(1, notification);

Paramètres :

  • l'identifiant de la notification ;
  • la notification.

Ce qui nous donne pour finir :

 
Sélectionnez

@Override

public void onClick(View v) {

Notification notification = new Notification(R.drawable.icon,

"Mon appli",

System.currentTimeMillis());

Intent intentNotification = new Intent(Intent.ACTION_VIEW,Uri.parse("tel:0102030405"));

PendingIntent pendingIntent = PendingIntent.getActivity(MonActivite.this, 0, intentNotification, 0);

notification.setLatestEventInfo(MonActivite.this, "Ma notification", "Passer un appel", pendingIntent);

notificationManager.notify(1, notification);

}

Lancez l'application et voyez par vous-même :

Image non disponible

IV. Quelques améliorations

Vous avez vu que si l'on clique sur la notification, celle-ci ne disparaît pas ? C'est embêtant.

Nous allons y remédier comme ceci, par le biais des flags :

 
Sélectionnez

notification.flags |= Notification.FLAG_AUTO_CANCEL;

Notre notification disparaîtra à sa sélection par l'utilisateur.

Pour les vibrations :

 
Sélectionnez

notification.defaults |= Notification.DEFAULT_VIBRATE;

Vous pouvez préciser la durée ou une suite de vibration en millisecondes :

 
Sélectionnez

notification.vibrate = new long[] {200,300,400,500};

Pour ce qui est de la notification à l'aide d'une sonnerie :

 
Sélectionnez

notification.defaults |= Notification.DEFAULT_SOUND;

Et pour finir les LEDs :

 
Sélectionnez

notification.defaults |= Notification.DEFAULT_LIGHTS;

Si vous désirez en savoir plus sur l'utilisation des Vibrations, sons, LEDs :

http://developer.android.com/guide/topics/ui/notifiers/notifications.html

V. Conclusion

Nous avons fait le tour des notifications. À vous de jouer maintenant, et n'oubliez pas il ne faut pas en abuser !

Sources du projet

VI. Remerciements

Je tiens à remercier tout particulièrement Feanorin qui a mis ce tutoriel au format Developpez.com. 
Merci également à ced d'avoir pris le temps de le relire et de le corriger.

VII. Liens