You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android应用通知图标异常:自定义图标不生效仅显示黑灰圆圈

解决Firebase通知图标显示黑灰色圆圈的问题

嘿,我太懂这种明明配置了图标却不生效的挫败感了!你遇到的这个黑灰色圆圈问题,其实是Android系统的硬性要求导致的——从API 21(Android 5.0)开始,通知图标必须是纯白色、透明背景的矢量图或png图,系统会自动忽略其他颜色的图标,替换成默认的黑灰色占位符。

下面是一步步解决的具体方案:

1. 准备符合要求的通知图标

  • 制作一个纯白色、背景完全透明的图标,尺寸要覆盖不同dpi:
    • mdpi: 24x24px
    • hdpi: 36x36px
    • xhdpi: 48x48px
    • xxhdpi: 72x72px
    • xxxhdpi: 96x96px
  • 把这些图标放到对应的res/drawable-xxxhdpi/等目录下,比如命名为ic_notification.png或者矢量图ic_notification.xml

2. 在AndroidManifest.xml中配置默认通知图标

<application>标签里添加这两行,指定默认的通知图标和可选的图标背景色:

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

这里的@color/notification_color是你想要的通知图标背景色,比如红色、蓝色等,需要在res/values/colors.xml里提前定义。

3. 代码构建通知时手动指定图标

如果你的onMessageReceived里是自己构建NotificationCompat.Builder,记得手动设置小图标:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notification) // 必须用符合要求的纯白透明图标
        .setContentTitle(remoteMessage.getNotification().getTitle())
        .setContentText(remoteMessage.getNotification().getBody())
        .setColor(getResources().getColor(R.color.notification_color));

注意:状态栏显示的是setSmallIcon的内容,setLargeIcon只是下拉通知栏里的大图标,别搞混了。

4. 排查常见坑点

  • 绝对不要用带颜色的图标:哪怕颜色很浅,系统也会强制转换成黑灰色
  • 清理缓存重启:有时候旧的图标缓存会导致新图标不生效,可以卸载重装app或者重启设备试试
  • 确认渠道配置:如果是Android 8.0及以上,要确保通知渠道的图标也设置正确

按照这些步骤来,应该就能看到你的自定义通知图标正常显示啦!

内容的提问来源于stack exchange,提问作者Lars

火山引擎 最新活动