Flutter使用flutter_local_notification时部分安卓设备通知图标不显示
问题原因分析
该问题是Android 5.0(API 21)及以上系统的通知图标强制规范导致的:系统会自动忽略通知图标的所有RGB颜色通道,仅保留Alpha透明通道做渲染。如果使用的通知图标带有非透明背景、彩色内容,不符合系统规范,在对规范要求严格的设备上就会被系统处理为灰色圆圈,仅有文本和大图可以正常展示。不同安卓厂商对通知图标规范的校验严格程度不同,所以会出现部分设备显示正常、部分设备图标异常的情况。
修复步骤
- 生成符合规范的通知图标
通知图标要求为仅含Alpha通道的剪影图标:背景完全透明,图案部分仅保留纯白色填充,不要添加任何彩色内容。推荐使用Android Studio自带工具生成:
打开项目的android目录,右键res文件夹 -> 选择「New」->「Image Asset」,将Icon Type设置为「Notification Icons」,导入你的原始图标素材后工具会自动生成符合规范的各dpi尺寸图标,生成的图标会默认存放到对应dpi的drawable目录下。注意:不建议使用存放在
mipmap目录下的桌面启动图标作为通知图标,桌面图标通常不符合通知图标规范。 - 调整flutter_local_notifications初始化配置
安卓端初始化通知配置时,明确指定你生成的通知图标资源名(不需要加文件后缀),示例代码如下:const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('ic_notification'); // 此处ic_notification为你生成的通知图标文件名 - 适配混合推送场景(可选)
如果你同时使用了Firebase Cloud Messaging等推送服务配合本地通知展示,还需要在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_theme_color" /> - 验证效果
卸载设备上的旧版本应用后重新编译安装,避免缓存导致图标不更新。
注意事项
- 生成图标时不要保留任何彩色通道内容,仅保留透明背景+白色剪影图案即可,系统会自动根据通知栏主题适配图标显示效果。
- 如果你需要在通知中展示彩色大图标,可以通过通知的
largeIcon参数单独配置,和默认小图标互不影响。
内容的提问来源于stack exchange,提问作者Ibrahim Rehman
相关产品推荐
相关产品推荐

