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 RVB 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 !

  • Progression d'un traitement

    public Notification.Builder setProgress (int max, int progress, boolean indeterminate)

    Affiche une barre de progression.

    • max est la valeur maxi de la barre de progression,
    • progress est la valeur représentant l'état d'avancement
    • et indeterminate pour indiquer que l'on ne connaît pas la fin du traitement, il n'est donc pas possible d'afficher la progression. Dans ce cas, Android affiche une barre généraliste d'avancement du traitement: Comme dans l'exemple suivant pour la NOTIFICATION PAR BUILDER

      Image non trouvée !

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);

  • Enregistrer l'heure de la création de la notification

    public Notification.Builder setWhen (long when)

    Il s'agit du when ou quand de la notification sous forme de timestamp. Cela va permettre entre autre à Android de trier l'affichage des notifications par rapport à cette heure enregistrée.

    C'est aussi cette heure d'arrivée qui sera affichée par défaut dans la liste des notifications. Cet affichage pourra être désactivé.

    Image non trouvée !Une heure sera générée automatiquement par défaut au moment de la création de l'instance.

  • Afficher l'heure d'enregistrement de la notification

    public Notification.Builder setShowWhen (boolean show)

    Il s'agit d'afficher votre notification dans la liste des notifications reçues avec ou sans l'heure d'enregistrement de la notification que vous avez préalablement enregistré.

    Image non trouvée !

    Dans cette exemple, Antenne Free affiche bien l'heure, pas la seconde.

    Image non trouvée !L'heure est affichée par défaut.

  • Définir une icone à afficher avec la notification

    public Notification.Builder setSmallIcon (int icon) avec icon un id de ressource provenant de drawable.

  • Définir une large icone à afficher de type bitmap

    setLargeIcon(Bitmap icon)

  • Définir la priorité de traitement de la notification

    Cf. les priorité des notifications. Par défaut à Notification.PRIORITY_DEFAULT

 

Il en existe d'autres ...