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)
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.
- Paramétrer le son à jouer lors de la notification
public Notification.Builder setSound (Uri sound)
- Paramétrer la vibration
setVibrate(long[] pattern)
Avec pattern la définition de la vibration à obtenir.
- Allumer la led de notification
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)
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)
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)
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
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 !
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é.
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é.
Dans cette exemple, Antenne Free affiche bien l'heure, pas la seconde.
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 ...