Android通知图标颜色有时是白色,有时是彩色的

时间:2016-06-13 18:24:31

标签: android android-notifications

我的Android应用程序存在一个小问题。它通过FCM收到通知,并将其显示为推送通知。到目前为止,它一切正常,但奇怪的问题是,有时候图标是白色的,有时它是丰富多彩的。

当应用程序在屏幕上打开并且此时我收到推送通知时,彩色推送通知会显示在屏幕顶部。

当应用关闭时,我会收到一个带有白色图标的推送通知。

我附上了一个屏幕: Screenshot

以下是代码段,其中创建了推送通知:

        Notification.Builder notificationBuilder = new Notification.Builder(this)
            .setSmallIcon(android.R.drawable.ic_dialog_alert)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
            .setAutoCancel(true)
            .setVisibility(Notification.VISIBILITY_PUBLIC)
            .setPriority(Notification.PRIORITY_HIGH)
            .setColor(Color.parseColor("#83c3ed"))
            .setLights(Color.RED, 1000, 500)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);
    Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
    inboxStyle.setBigContentTitle("WetterApp");
    inboxStyle.addLine(notification.getTitle());
    inboxStyle.addLine(notification.getBody());
    notificationBuilder.setStyle(inboxStyle);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(0, notificationBuilder.build());

我的移动设备有Android 6.0.1,我的SDK版本是23。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

嗯,我认为这个问题有所不同。仅当应用程序在屏幕上打开时,才会调用我创建通知的代码。当我收到通知并关闭应用程序时,Android系统会自动处理通知。

我必须在通知中设置颜色,然后发送到FCM服务器:

 $data = [
        'notification' => [
            'title' => 'Warnung: Wohnzimmer',
            'text' => 'Innen: 20,3°C Außen: 24,5°C, Tendenz: -0,2°C',
            'color' => '#83c3ed',
            'sound' => 'default'
        ],
        'to' => '/topics/testNotification'
    ];

现在我在应用程序中以及应用程序关闭时获得了浅蓝色背景图标。

答案 1 :(得分:0)

按照谷歌的guide创建你的图标,它可能也是在状态栏中发生的。

然后,试试这个:

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
            builder.setTicker(context.getResources().getString(R.string.app_name));
            builder.setSmallIcon(R.mipmap.ic_your_status_bar_logo);
            builder.setAutoCancel(true);
            builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
            builder.setContentIntent(pendingIntent);          
       builder.setContentTitle(
context.getResources().getString(R.string.app_name));
            builder.setContentText(message);
            builder.setDefaults(Notification.DEFAULT_SOUND);
            builder.setPriority(NotificationCompat.PRIORITY_HIGH);
            builder.setColor(ContextCompat.getColor(context, R.color.color_primary));
            NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            nm.notify(NOTIFICATION_ID, builder.build());

答案 2 :(得分:-1)

我认为更好的解决方案是在应用中添加一个轮廓图标,并在设备运行Android Lollipop时使用它。

例如:

Notification notification = new Notification.Builder(context)
            .setAutoCancel(true)
            .setContentTitle("My notification")
            .setContentText("Look, white in Lollipop, else color!")
            .setSmallIcon(getNotificationIcon())
            .build();

    return notification;

并且,在getNotificationIcon方法中:

private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_silhouette : R.drawable.ic_launcher;
}