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

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



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 : 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);
Notification fille :
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);
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é.



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