Notification par texte
Explications
Les notifications sont composées à la base d'un texte et d'un icone.
int icon = R.drawable.icon;
String tickerText = "Ma Notification...";
Cependant, d'autres informations seront nécessaires:
Les notifications sont envoyées au système à un manager de notifications. Celui-ci va effectuer un tri lorsque l'utilisateur va demander l'affichage de l'ensemble des notifications. Il se base pour cela sur un champ "when" ou "quand" de type time en milliseconde. Il faudra donc passer cette information:
long timeMilli = System.currentTimeMillis();
Il ne reste plus qu'à construire une instance de Notification de la manière suivante:
Notification notification = new Notification();
notification.icon=icon;
notification.tickerText=tickerText;
notification.when=timeMilli;
Mais ce n'est pas terminé pour autant, l'utilisateur recevant une notification va généralement avoir besoin de plus d'informations concernant cette notification (cause, comment résoudre ou répondre au contenu de cette notification). Par conséquent, il faudra indiquer à Android quelle intention devra lancer cette notification si l'utilisateur la sélectionne dans la liste.
Il s'agit de passer une intention explicite ou une intention implicite, Par exemple, lancement de l'application gérant les contactes:
Intent monIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people"));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, monIntent,
Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent permet de faire passer les droits de l'activité courante à une autre activité qui pourrait en avoir besoin. En gros nous indiquons à cette activité d'effectuer un travail pour notre compte.
La méthode qui passera l'intention se nomme setLatestEventInfo et aura besoin du contexte:
Dans le cas d'un service:
Context context = ServiceMonService.this.getApplicationContext();
ou getBaseContext() ou encore this;
notification.setLatestEventInfo(context, getText(R.string.app_name), tickerText, pendingIntent);
Cette méthode
est dépréciée depuis android l'API
11 (Android 3.0 - HONEYCOMB). Il existe un notification
builder qui fait permet de construire une instance complète de Notification...
Il faut inciter les utilisateurs à utiliser les dernières versions d'android...Problème, les téléphones ne suivent pas, par conséquant, si vous voulez quelque chose de compatible avec Gingerbread par exemple, il faudra bien l'utiliser, dépréciée ou pas ! Sinon, une autre solution consiste à utiliser Android Support Library avec entre le NotificationCompat.Builder.
Enfin, après avoir préparé votre notification, il vous restera à l'envoyer. Vous utiliserez le NotificationManager pour cela.
Priorité des notifications
public int priority permet d'indiquer la priorité d'affichage de la notification. Avec les constantes de Notification:
API 16: PRIORITY_DEFAULT, PRIORITY_HIGH, PRIORITY_LOW, PRIORITY_MAX, PRIORITY_MIN
Des flags
notification.flags permet de positionner certains flags sur la notification.
Rappel: Pour modifier ce flag (ajouter une option particulière), utiliser notification.flags |= le_nouveau_flag. Ainsi les flags précédemments positionnés ne seront pas perdus. Pour positionner plusieurs flags, il faudra faire un ou logique soit le |...
Il sera utilisé en autre pour allumer la led de notification, mais aussi pour:
FLAG_NO_CLEAR La notification ne pourra être effacée par l'utilisateur de la liste des notifications
FLAG_ONGOING_EVENT A utiliser pour prévenir que quelque chose survient (comme un appel téléphonique par exemple)
FLAG_ONLY_ALERT_ONCE Pour alerter qu'une seule fois l'utilisateur
FLAG_FOREGROUND_SERVICE Pour indiquer qu'un service fonctionne actuellement en avant plan (donc prioritaire). Cf. startForeground (int, Notification) envoyant la notification pour vous.
FLAG_INSISTENT Le son de la notification sera répété tant que l'utilisateur n'a pas annulé (effacé) la notification ou ouvert la notification.
Exemple de code
De nouveau en partant sur le programme helloworld (explications), en ajoutant la notification...
Lancez ce magnifique programme, puis allez voir dans la barre de notifications, vous devez en trouver au moins une nouvelle !
"Cliquez" dessus, et l'application contactes devrait se lancer !
Pour aller plus loin
Il existe d'autres paramètres que l'on peut passer à une notification:
- Faire vibrer le mobile
- Clignoter la led dans différentes couleurs
- Déclencher un son
Tout cela étant vu dans le chapitre notification...