通知栏图标在Android中从FCM变为白色

时间:2017-04-19 10:18:09

标签: java android push-notification

我知道要支持Lollipop Material设计指南,我们必须将通知图标设为透明。

这是我的FCM onMessageReceived()函数,用于显示通知。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    NotificationCompat.Builder mBuilder;
    mBuilder =   new NotificationCompat.Builder(this)
            .setContentTitle(remoteMessage.getNotification().getBody()) // title for notification
            .setContentText(remoteMessage.getNotification().getTitle()) // message for notification
            .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND)
            .setSmallIcon(getNotificationIcon())
            .setAutoCancel(true); // clear notification after click

    Intent intent = new Intent(this, CheckInListPage.class);
    PendingIntent pi = PendingIntent.getActivity(this,0,intent,Intent.FLAG_ACTIVITY_NEW_TASK);
    mBuilder.setContentIntent(pi);
    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.logo_a_transparent : R.drawable.logo_notifc;
}

但是我的问题是,当应用程序在前台运行并且可见时,它将采用我的logo_a_transparent并获得所需的结果(屏幕截图 - 通知栏中的第一个图标)。

但是当我们暂停应用程序和FCM推送时,它需要我的应用程序图标(android:icon =“@ drawable / ic_launcher”)作为通知图标变为白色(屏幕截图 - 通知栏中的第二个图标)。 / p>

将应用程序图标替换为透明将起作用,但不是正确的解决方案。

Line Breaking and Word Boundaries

3 个答案:

答案 0 :(得分:0)

在你的menifest文件中添加这一行,将你的资源设置为你的选择

<meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@mipmap/ic_notification" />

<meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@android:color/transparent" />

答案 1 :(得分:0)

使用FCM,您可以向客户应用程序发送两种类型的消息

1)通知消息, 2)数据消息 Here fcm doumentation

仅当应用程序处于前台时,

通知消息才会调用onMessageReceived()。当应用程序处于由Android系统自动处理的后台而不是调用onMessageReceived()时,通知消息将传递到通知托盘。系统使用app图标作为通知图标,这就是为什么图标在后台推送中变为白色的原因。 Android应用程序不需要透明。

对于数据消息,无论应用是在后台还是在前台,它都将始终由onMessageReceived()处理。

数据讯息

  {  "to" : "Ahd8fsdfu78sd...", "data" : {
     "Name" : "...",
     "body" : "...",
    }
}

所以我应该使用仅数据消息有效负载或带有通知和数据有效负载的消息,因此我的onMessageReceived()可以处理这个并显示正确的通知图标。

答案 2 :(得分:0)

修复firebase 12.0.0。只需将build.gradle更新为12.0.0

即可

https://firebase.google.com/support/release-notes/android#20180320