You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13及以上推送通知自定义图标显示白圈问题修复咨询

Android 13+ 通知自定义图标显示为白圈的问题排查与修复

问题成因

Android 13(API 33)及以上版本对通知图标的规范做了更严格的限制,核心原因包括:

  • 图标不符合单色透明规范:系统要求通知图标只能是带alpha通道的单色图形(无彩色填充),彩色图标会被自动替换为默认白圈
  • 图标资源位置或尺寸不达标:mipmap目录主要用于应用启动图标,通知图标放在这里可能无法被Android 13+的通知系统正确识别;同时图标尺寸不足、边缘留白不够也会触发系统替换
  • 代码/第三方推送配置缺失:没有在通知构建时明确指定符合要求的图标,或第三方推送后台配置的图标不符合新版规范

修复方法

1. 重新制作符合规范的通知图标

  • 图标必须是透明背景+单色形状(仅保留alpha通道信息,颜色会由系统根据主题自动调整),禁止使用彩色填充的图标
  • 优先使用矢量图(命名如ic_notification.xml),放在drawable目录,矢量图能适配所有分辨率,且更容易满足系统的透明度要求
  • 图标尺寸参考官方规范:24dp×24dp(mdpi)、36dp×36dp(hdpi)、48dp×48dp(xhdpi)、72dp×72dp(xxhdpi)、96dp×96dp(xxxhdpi),边缘至少留2dp留白

2. 调整通知构建代码

在创建通知时,明确指定drawable目录下的单色图标,还可按需设置图标 tint 颜色适配系统主题:

// Kotlin 示例
val notificationBuilder = NotificationCompat.Builder(context, YOUR_CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notification) // 核心:指定符合规范的图标
    .setColor(ContextCompat.getColor(context, R.color.your_notification_tint)) // 可选:设置图标 tint 色
    .setContentTitle("通知标题")
    .setContentText("通知内容")
    .setPriority(NotificationCompat.PRIORITY_DEFAULT)

3. 检查第三方推送配置(如Firebase)

如果使用第三方推送服务,需确保:

  • 后台推送 payload 中的icon字段指定为你的自定义图标名称(不带扩展名,比如ic_notification)
  • 后台上传的通知图标符合Android 13+的单色透明规范

4. 同步更新通知渠道配置

Android 8.0+的通知渠道若设置了默认图标,会覆盖通知中的图标配置,需同步更新:

// Kotlin 示例
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val channel = NotificationChannel(YOUR_CHANNEL_ID, "渠道名称", NotificationManager.IMPORTANCE_DEFAULT)
    channel.setIcon(R.drawable.ic_notification) // 渠道图标同步设置
    notificationManager.createNotificationChannel(channel)
}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:42:38