我的应用程序生成了一个通知,但我为该通知设置的图标不显示。相反,我得到了一个白色的正方形。

我已经尝试调整图标的png大小(尺寸720x720, 66x66, 44x44, 22x22)。奇怪的是,当使用更小的维度时,白色正方形也更小。

我已经谷歌了这个问题,以及生成通知的正确方式,从我所读到的我的代码应该是正确的。不幸的是,事情并不像他们应该的那样。

我的手机是装有安卓5.1.1系统的Nexus 5。这一问题也出现在模拟器上,比如安装Android 5.0.1的三星Galaxy s4和安装Android 5.0.1的摩托罗拉Moto G(这两款模拟器都是我借来的,现在没有)。

下面是通知代码和两个截图。如果你需要更多的信息,请尽管提出来。

谢谢大家。

@SuppressLint("NewApi") private void sendNotification(String msg, String title, String link, Bundle bundle) {
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
    resultIntent.putExtras(bundle);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            resultIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
    Notification notification;
    Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notificationsound);
    notification = new Notification.Builder(this)
                .setSmallIcon(R.drawable.lg_logo)
                .setContentTitle(title)
                .setStyle(new Notification.BigTextStyle().bigText(msg))
                .setAutoCancel(true)
                .setContentText(msg)
                .setContentIntent(contentIntent)
                .setSound(sound)
                .build();
    notificationManager.notify(0, notification);
}


当前回答

(Android Studio 3.5) If you're using a recent version of Android Studio, you can generate your notification images. Right-click on your res folder > New > Image Asset. You will then see Configure Image Assets as shown in the image below. Change Icon Type to Notification Icons. Your images must be white and transparent. This Configure Image Assets will enforce that rule. Important: If you want the icons to be used for cloud/push notifications, you must add the meta-data under your application tag to use the newly created notification icons.

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

其他回答

为了减少SDK的特定版本,你可以简单地这样做:(将'#'替换为'0x')

Notification notification = new NotificationCompat.Builder(this);
notification.setSmallIcon(R.drawable.icon_transperent);
notification.setColor(0x169AB9); //for color: #169AB9

当你想保持彩色图标-变通 在图标中添加颜色略有不同的像素。在我的情况下,有黑色图标的阴影和光。当添加深蓝色像素它的工作。

原因:对于5.0棒棒糖“通知图标必须完全白色”。

如果我们通过将目标SDK设置为20来解决白色图标问题,我们的应用程序 不会针对安卓棒棒糖,这意味着我们不能使用 Lollipop-specific特性。

目标Sdk 21的解决方案

如果你想支持棒棒糖材质图标,那么为棒棒糖和上面的版本制作透明图标。请参阅以下资料: https://design.google.com/icons/

请查看http://developer.android.com/design/style/iconography.html,我们将看到白色风格是通知在Android Lollipop中显示的方式。

在Lollipop中,谷歌还建议我们使用一种将显示在白色通知图标后面的颜色。参考链接:https://developer.android.com/about/versions/android-5.0-changes.html

在我们想添加颜色的地方 https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html改变颜色(int)

以下和以上棒棒糖操作系统版本的通知生成器的实现将:

Notification notification = new NotificationCompat.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    notification.setSmallIcon(R.drawable.icon_transperent);
    notification.setColor(getResources().getColor(R.color.notification_color));
} else { 
    notification.setSmallIcon(R.drawable.icon);
} 

注意:setColor只在Lollipop中可用,它只影响图标的背景。

它将彻底解决你的问题!!

根据谷歌的设计指南:

通知图标必须完全为白色。

如果你想提供棒棒糖支持的通知图标,那么做两种类型的通知图标:

普通通知图标:适用于棒棒糖以下版本。 通知图标与透明背景:棒棒糖和以上版本。

现在根据OS版本在运行时设置适当的图标为通知生成器:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    mBuilder.setSmallIcon(R.drawable.ic_push_notification_transperent);
} else {
    mBuilder.setSmallIcon(R.drawable.ic_push_notification);
}