web-dev-qa-db-fra.com

L'icône de notification Android 5.1 Push est vide

Lorsque nous utilisons Parse pour les notifications Push, notre application affiche toujours l'icône du lanceur de l'application. Dans la dernière version d'Android 5.1, l'icône semble être vide (un carré blanc).

J'ai essayé de définir l'icône dans les métadonnées:

<meta-data Android:name="com.parse.Push.notification_icon" Android:resource="@drawable/noti_icon"/>

Basé sur la question ici

Mais rien ne semble fonctionner. Des idées?

15
Shahal Hazan

Vous devez utiliser une icône transparente et blanche sous Android Lollipop 5.0 ou supérieur. Vous pouvez étendre la classe ParsePushBroadcastReceiver et remplacer les deux méthodes pour que votre icône de notification soit compatible avec ces API Android.

    @Override
protected int getSmallIconId(Context context, Intent intent) {
    return R.drawable.your_notifiation_icon;
}

@Override
protected Bitmap getLargeIcon(Context context, Intent intent) {
    return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon);
}

N'oubliez pas de personnaliser votre code pour prendre en charge Lollipop et les API précédentes.

        if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop) {
        return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon_Lollipop);
    }
    else{
        return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon);
    }
12
Pelanes

Ce n'est pas lié à la nitification Parse ou Push, mais à la façon dont Android 5.0 gère les icônes de notification. Consultez cette question répétée pour plus de détails: L'icône de la barre de notification devient blanche dans Android 5 Lollipop

2
Muzikant

Essayez ce code.

Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.ic_launcher)
                .setLargeIcon(largeIcon)
                .setContentText(data)
                .setContentTitle("Notification from Parse")
                .setContentIntent(pendingIntent);
0
Jignesh Goyani

Bien que @Pelanes ait la bonne réponse (et devrait être acceptée), voici ce que j'ai fait. Notez que le Parse docs pour getSmallIconId indique ce qui suit:

Retrieves the small icon to be used in a Notification. The default implementation uses the icon specified by com.parse.Push.notification_icon meta-data in your AndroidManifest.xml with a fallback to the launcher icon for this package. To conform to Android style guides, it is highly recommended that developers specify an explicit Push icon.

Il n'est donc pas nécessaire de remplacer les méthodes getSmallIconId () et getLargeIcon (). 

Pour résoudre le problème, je me suis contenté de copier mon icône, d'insérer des "trous" transparents dans l'icône et de définir les métadonnées com.parse.Push.notification_icon de mon manifeste pour qu'elles pointent vers cette nouvelle icône. 

Pour Android 5.0, il est nécessaire que l'icône de notification soit blanche et transparente, comme d'autres l'ont mentionné. Donc, la création de l'icône séparée est nécessaire. Il suffit d’une ligne dans le manifeste et d’un nouveau fichier extractible.

0
h_k