Notification Builder

 

Il s'agit d'un builder (design pattern builder, monteur en français) pour les Notifications créé à partir de l'API 11 et à utiliser de préférence à la création manuelle d'une instance de Notification !

 

Construire une instance de Notification

Le constructeur est:

Notification.Builder(Context context)

Pour rappel, le context d'une activité sera simplement récupéré en utilisant this. Sinon, le context est peut être passé en paramètre (comme c'est le cas d'un broadcast receiver).

Par défaut, le builder génère une instance de Notification avec:

priority à PRIORITY_DEFAULT, when à now (currentTimeMillis()) et audio stream à STREAM_DEFAULT.

Ces paramètres correspondants aux paramètres attendus par une Notification.

 

Pour modifier les attributs de votre future Notification, vous passerez par des setters du builder.

Pour construire l'instance de votre notification ainsi configurée, il faudra appeler la méthode build() du builder.

Enfin, le notification manager pour envoyer la notification.

 

Exemple:

Où sont équivalent "compacté"

 

Quelques setters

  • Définir le titre de la notification (qui sera affiché dans la barre de notifications)

public Notification.Builder setContentTitle (CharSequence title)

  • Définir le texte de la notification

public Notification.Builder setContentText (CharSequence text)

  • Définir le sous texte de la notification

setSubText(CharSequence text)

Image non trouvée !Vous ne pourrez pas l'utiliser si vous avez déclaré une progression...

  • Définir les valeurs par défaut à utiliser dans une instance de Notification

public Notification.Builder setDefaults (int defaults)

Permet d'indiquer les propriétés par défaut à utiliser pour la notification: DEFAULT_SOUND, DEFAULT_VIBRATE, DEFAULT_LIGHTS, que vous pourrez combiner en utilisant | pour le ou logique. Pour utiliser toutes les propriétés par défauts, utilisez DEFAULT_ALL.

public Notification.Builder setSound (Uri sound)

setVibrate(long[] pattern)

Avec pattern la définition de la vibration à obtenir.

setLights(int argb, int onMs, int offMs)

Les paramètres sont donc identiques à ceux de la définition de la led de la notification et heureusement !

argb: les paramètres alpha et RVBComposantes Rouge, Vert et Bleu (ou RGB pour Red, Green, Blue en anglais) qui sont les couleurs primaires en informatique. de la couleur à rendre (cf. classe Color).

OffMS : Durée en MS pendant laquelle la led sera éteinte.

OnMS : Durée en MS pendant laquelle la led sera allumée

  • Lancement d'une intention plutôt que l'affichage dans la barre de notification

public Notification.Builder setFullScreenIntent (PendingIntent intent, boolean highPriority)

Image non trouvée !A utiliser avec parcimonie, à moins que vous ne vouliez faire craquer l'utilisateur ! Uniquement dans les cas d'urgence !

Les paramètres sont:

PendingIntent intent: Cf. Intention, PendingIntent

boolean highPriority: Pour indiquer à vrai que c'est tellement urgent qu'il faut passer cette notification avant toutes autres notifications en attentes d'affichage.

  • Notification d'évènement survenant (comme appel téléphonique) et tâche en arrière plan (service)

Image non trouvée !Dans ce cas, seule l'icone apparaît dans la barre de notifications. Le titre n'est pas affiché. Il apparaîtra avec le texte lorsque l'utilisateur déroulera le contenu des notifications.

public Notification.Builder setOngoing (boolean ongoing)

Image non trouvée !L'utilisateur ne peut pas effacer cette notification de la liste des notifications, l'application ou le service devra donc faire le cancel via le notification manager lorsque cela sera nécessaire, par exemple lorsqu'il se termine !

Pour faire évoluer cette barre de progression (donc indeterminate positionné à false) :

    • Concervez votre instance de Notification builder (il contient déjà toutes les informations sur les informations/attributs de la notification)
    • Concervez votre instance de NotificationManager (il reservira à mettre à jour la notification en la renotifiant
    • Conservez le n° de notification !
    • Dans le traitement long, où vous allez pouvoir faire évoluer la barre de progression pour indiquer l'évolution de celui-ci, réutiliser le builder de la notification en modifiant progress de setProgress (int max, int progress, boolean indeterminate). Puis renvoyer via le notification manager la notification avec le même n° que celui utilisé 'initialement.
    • D'où l'exemple à ne surtout pas reproduire tel quel, surtout dans une activité (ANR) ! Ce serait plutôt dans un service. Ce code est là Juste pour résumer rapidement comment cela marche !

      Image non trouvée !Dans cet exemple, la notification est ongoing pour éviter un effacement de la part de l'utilisateur, puis redevient normale lorsque le traitement est terminé, permettant à l'utilisateur d'effacer la notification.

  • Exécution d'un PendingIntent lorsqu'un utilisateur clique sur une notification

Vous pourrez ainsi lancer une activité apropriée à l'information contenu dans la notification (pour afficher plus d'informations, permettre une prise de décision comme appeler quelqu'un, envoyer un SMS, ...).

setContentIntent(PendingIntent intent)

PendingIntent intent: Cf. Intention, PendingIntent

Exemple:

Intent intent= new Intent(this, NotificationActivity.class); // Avec NotificationActivity une activité parmettant de traiter ce l'information de la notification...

PendingIntent pendingIntent= PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
builderNotification.setContentIntent(pendingIntent);

 

Il en existe d'autres ...