[Tutoriel] Les notifications sous Android N
Bonjour à tous,
Avec la sortie récente de la version developer preview d'Android N, j'avais envie ici de partager les principales nouveautés concernant les notifications, en espérant que ça puisse être utile.
Notifications Direct Reply
Android offre maintenant la possibilité d'ajouter des notifications permettant à l'utilisateur de répondre directement dans la notification.
http://www.gahfy.net/wp-content/uplo.../03/demo-2.png
Pour mettre en place une telle notification, il va falloir instancier un RemoteInput que l'on va ajouter au Notification.Action.Builder comme ceci (dans l'exemple ci-dessous, le pendingIntent ne fait qu'appeler un BroadcastReceiver) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
Notification.Builder mBuilder = //... (Mettez votre Builder de notification)
private static final String NOTIFICATION_KEY;
RemoteInput remoteInput = new RemoteInput.Builder(NOTIFICATION_KEY)
.setLabel(getString(R.string.text_hint))
.build();
Notification.Action action =
new Notification.Action.Builder(icon,
getString(R.string.text_button_action), pendingIntent)
.addRemoteInput(remoteInput)
.build();
mBuilder.addAction(action); |
Ensuite, il va falloir récupérer le texte saisi dans notre PendingIntent. Pour cet exemple, j'ai choisi un PendingIntent qui appelle un BroadcastReceiver. Le code du BroadcastReceiver sera du coup comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10
|
@Override
public void onReceive(Context context, Intent intent) {
// On récupère le RemoteInput depuis l'Intent
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput != null) {
// On utilise la constante prédéfinie ci-dessus pour récupérer le texte.
CharSequence typedText = remoteInput.getCharSequence(NOTIFICATION_KEY);
}
} |
Exemple concret d'application : Les Notifications Direct Reply
Bundled Notifications
Android permet désormais de regrouper les notifications, un peu comme c'est déjà le cas avec Android Wear.
http://www.gahfy.net/wp-content/uplo...ifications.png
La mise en place est assez simple, et s'effectue là encore, comme sous Android N. Pour faire de telles notifications groupées, il vous faudra deux choses :
- Une notification "mère" : celle qui sera la notification titre du groupe.
- Une ou plusieurs notifications filles : celles qui seront incluses dans le groupe.
Ensuite, il vous faudra, pour toutes les notifications, appeler la méthode setGroup du Notification.Builder, qui vous permettra d'associer toutes les notifications à un même groupe :
Notification mère :
Code:
1 2 3 4 5 6 7 8
| Notification.Builder mBuilder = new Notification.Builder(this)
.setSmallIcon(R.drawable.small_icon)
.setContentTitle(mainNotificationTitle)
.setContentText(mainNotificationTitle);
// On affecte cette notification au groupe
.setGroup(GROUP_KEY_MAIL);
// On indique qu'il s'agit de la notification "mère"
.setGroupSummary(true); |
Notification fille :
Code:
1 2 3 4 5 6
| Notification.Builder mBuilder = new Notification.Builder(this)
.setSmallIcon(R.drawable.small_icon)
.setContentTitle(mainNotificationTitle)
.setContentText(mainNotificationTitle);
// On affecte cette notification au groupe
.setGroup(GROUP_KEY_MAIL); |
Attention : Si vous faîtes un cancel sur la notification mère, cela annulera également toutes les notifications filles du groupe
Exemple concret d'application : Les Bundled Notifications
Notifications CustomViews
Enfin, dernière nouveauté, la possibilité de générer des notifications avec un design personnalisé.
http://www.gahfy.net/wp-content/uplo...stom_views.png
Pour la mise en place, elle est là encore assez simple. Il suffit d'instancier une RemoteViews avec un layout que vous aurez préparé, puis d'affecter ensuite à la notification cet objet RemoteViews, et le style Notification.DecoratedCustomViewStyle() :
Code:
1 2 3 4 5 6 7
| Notification.Builder mBuilder = new Notification.Builder(this)
.setSmallIcon(R.drawable.small_icon);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.notification_layout);
mBuilder.setStyle(new Notification.DecoratedCustomViewStyle())
.setCustomContentView(remoteViews); |
L'objet RemoteViews ne propose pas de méthode findViewById(), mais de nombreuses méthodes vous permettront de personnaliser votre notification. Parmi elles, citons :
- setTextViewText(int resId, CharSequence text) : permet de mettre à jour le texte d'une TextView de la RemoteViews
- setTextColor(int resId, int color) : permet de modifier la couleur d'une TextView de la RemoteViews
- setImageViewResource(int imgvResId, int drawableResId) : permet de modifier l'image d'une ImageView
Je vous suggère de faire un tour du côté de la doc Android : RemoteViews
Exemple concret d'application : Les Notification Custom Views
Pour ceux que cela intéresse, un repo GitHub contient une application utilisant tous les exemples cités ci-dessus : AndroidNSamples (À noter, ce repo est amené à être mis à jour plus généralement avec les nouveautés d'Android N. Pour accéder à la version ne contenant que les notifications, rendez-vous à la release 4.0).
En espérant que ce tuto vous aura intéressé. N'hésitez pas à me dire ce que vous en pensez en réponse.