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

Flutter应用Android通知小图标不显示问题排查与解决求助

问题分析与解决方案

核心关键:Android通知小图标有强制规范

Android系统对通知小图标有严格要求:必须是纯白主体+透明背景的单色图标(Android 8.0+可通过color属性给图标染色,但图标本身仍需为单色)。如果图标不符合这个标准,系统会自动替换成默认图标,这是最常见的触发原因。

可能原因及对应解决步骤

1. 小图标不符合Android规范

  • 检查你的small_launcher_icon是否为纯白+透明背景的单色图,彩色图标会被系统直接过滤。
  • 制作图标时需匹配各分辨率尺寸:mdpi 24x24、hdpi 36x36、xhdpi 48x48、xxhdpi 72x72、xxxhdpi 96x96,确保所有常用分辨率目录都有对应图标。

2. 图标路径引用错误

  • 图标需放在android/app/src/main/res/drawable-xxx或mipmap-xxx目录下,代码中引用时只需要写图标文件名,不需要带drawable/或mipmap/前缀。
  • 修改代码中的smallIcon:
    String smallIcon = 'small_notification_icon'; // 仅保留图标文件名
    

3. 通知渠道配置覆盖了图标设置

Android 8.0+的通知渠道一旦创建,其图标设置会覆盖单个通知的图标配置。如果之前创建过channel_id渠道,且渠道图标不是目标小图标,即使代码里设置icon也无效。

  • 解决办法:
    1. 卸载应用重装(清除旧渠道配置),或在代码创建渠道时指定图标:
    await flutterLocalNotificationsPlugin.createNotificationChannel(
      AndroidNotificationChannel(
        'channel_id',
        'channel_name',
        description: '消息通知渠道',
        importance: Importance.high,
        icon: 'small_notification_icon', // 指定渠道图标
      ),
    );
    
    1. 注意:渠道创建后无法修改图标,必须卸载重装才能生效新配置。

4. FCM自带图标覆盖自定义设置

如果FCM推送的remoteMessage.notification?.android?.smallIcon不为空,会优先使用这个图标,覆盖你在AndroidNotificationDetails中设置的icon。

  • 强制覆盖FCM的图标设置,确保自定义图标生效:
    String smallIcon = 'small_notification_icon';
    AndroidNotificationDetails androidNotificationDetails =
        AndroidNotificationDetails('channel_id', 'channel_name',
            importance: Importance.high,
            priority: Priority.high,
            ticker: 'New message received',
            icon: smallIcon, // 强制使用自定义图标
            // 其他配置保持不变
            );
    

5. 系统缓存残留

  • 尝试重启设备,部分情况下系统的通知图标缓存会导致旧配置残留。

验证流程

  1. 替换符合规范的纯白透明小图标到对应资源目录。
  2. 修改代码图标引用为纯文件名。
  3. 卸载应用并清除设备缓存,重新安装。
  4. 发送前台测试通知,检查小图标显示情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:52:50