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.
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) :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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);
Exemple concret d'application : Les Notifications Direct Reply
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Bundled Notifications
Android permet désormais de regrouper les notifications, un peu comme c'est déjà le cas avec Android Wear.
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 :
Notification fille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
Attention : Si vous faîtes un cancel sur la notification mère, cela annulera également toutes les notifications filles du groupe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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é.
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() :
L'objet RemoteViews ne propose pas de méthode findViewById(), mais de nombreuses méthodes vous permettront de personnaliser votre notification. Parmi elles, citons :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
- 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.
Partager