I. Les notifications▲
Android intègre dans son cœur 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 LED 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 :
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.
private
NotificationManager notificationManager;
Puis, récupérons le service dans la méthode onCreate de notre activité :
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 :
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 :
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 :
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.
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 :
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 :
notificationManager.notify
(
1
, notification);
Paramètres :
- l'identifiant de la notification ;
- la notification.
Ce qui nous donne pour finir :
@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 :
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 :
notification.flags |=
Notification.FLAG_AUTO_CANCEL;
Notre notification disparaîtra à sa sélection par l'utilisateur.
Pour les vibrations :
notification.defaults |=
Notification.DEFAULT_VIBRATE;
Vous pouvez préciser la durée ou une suite de vibration en millisecondes :
notification.vibrate =
new
long
[] {
200
,300
,400
,500
}
;
Pour ce qui est de la notification à l'aide d'une sonnerie :
notification.defaults |=
Notification.DEFAULT_SOUND;
Et pour finir les LED :
notification.defaults |=
Notification.DEFAULT_LIGHTS;
Si vous désirez en savoir plus sur l'utilisation des Vibrations, sons, LED :
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 !
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.