web-dev-qa-db-fra.com

android 7.0 Icône de notification apparaît carré blanc

J'utilise l'extrait ci-dessous pour générer des notifications dans mon application Android.

private void sendNotification(String contentText, String message) {

    Intent resultIntent = new Intent(this, MainActivity.class);
    resultIntent.putExtra("clear","clear");
    resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_CLEAR_TASK);

   PendingIntent piResult = PendingIntent.getActivity(this, 0, resultIntent,0);

    NotificationCompat.Builder builder=new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.icon)
            .setColor(ContextCompat.getColor(getApplicationContext(),R.color.red))
            .setContentTitle("title")
            .setContentText(message)
            .setAutoCancel(true)
            .setLargeIcon(BitmapFactory.decodeResource(getResources() 
            ,R.drawable.notification))
            .setContentIntent(piResult);

    NotificationCompat.InboxStyle notification = new NotificationCompat.InboxStyle(builder);

    int i;
    for(i=0; i<messageList.size();i++){
        notification.addLine(messageList.get(i));
    }
    notification.setBigContentTitle("title");
    notification.setSummaryText(contentText);

    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(NOTIFICATION_ID,notification.build());
}

Cela fonctionne dans Android 5 et 6 mais pour Android nougat cela ne fonctionne pas

6
Suresh Kumar

Depuis la version Android de Lollpop, ils ont effectué les modifications pour les notifications. Lorsque vous spécifiez la petite icône, celle-ci doit avoir une taille spécifique, comme indiqué dans ce lien

L'important est que l'image soit transparente et ne contienne que blanc couleur.

Vous pouvez vérifier cette question pour obtenir la réponse

3
Ichigo Kurosaki

En suivant les docs de l’API Android:

Les icônes de la barre d'état sont composées simplement de pixels blancs sur un fond transparent, le fondu alpha étant utilisé pour les contours lisses et la texture interne, le cas échéant.

Votre image entière mais les parties transparentes vont être converties en blanc (étant à l'origine blanc ou ayant des couleurs). 

Une solution consiste à créer une icône de silhouette avec de la couleur. Vous pouvez ainsi utiliser la même image dans toutes les API Android. Un exemple pourrait être cette icône:

 White image on a transparent backdrop

Dans les versions inférieures d'Android, vous verriez le visage noir, dans les dernières versions, vous verrez le même visage, mais avec une couleur blanche. C'est à cause des parties transparentes (il semble que SO supprime la transparence, vous pouvez obtenir l'original à partir de ici ) de l'image.

2
Alberto Méndez

Selon ce blog ici

Il dit que

Vous remarquerez que les icônes ne sont pas présentes dans les nouvelles notifications. à la place, les étiquettes elles-mêmes disposent de plus d'espace dans l'espace restreint de la teinte de notification. Toutefois, les icônes d'action de notification sont toujours requises et continuent d'être utilisées sur les anciennes versions d'Android et sur des appareils tels qu'Android Wear.

Si vous avez créé votre notification avec NotificationCompat.Builder et les styles standard disponibles, vous obtiendrez la nouvelle apparence par défaut, aucune modification de code n'étant requise.

1
Manoj Perumarath