Android 10模拟器推送通知小图标不显示问题求助
我之前也碰到过几乎一模一样的问题,在Android 10模拟器上折腾了好一阵才搞定,给你几个针对性的排查点和解决办法:
重新检查图标资源的规范性
别只看单个尺寸的图标,要确保所有mipmap-xxxhdpi、mipmap-xxhdpi等目录下都有对应的纯白色、透明背景图标,而且图标不能有任何额外的阴影、边框或者杂色。最稳妥的方式是用Android Studio的File > New > Image Asset工具,选择「Notification Icon」类型重新生成,这个工具会自动生成符合系统要求的多尺寸图标包。排查Notification Channel的配置
Target SDK 29强制要求使用Notification Channel,如果你没正确创建或注册Channel,也可能导致图标异常。检查你的Channel创建代码是否正确,并且CHANNEL_ID和Builder里的完全一致:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "你的渠道名称", NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription("渠道描述"); NotificationManager notificationManager = context.getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); }另外,模拟器可能缓存旧的Channel配置,建议卸载应用后重启模拟器,再重新安装测试。
FCM推送的额外注意点
如果你用的是Firebase Cloud Messaging,除了Manifest里的meta-data配置,还要确认后端推送时没有指定icon字段——如果后端设置了这个参数,会直接覆盖你本地的小图标设置。同时,确保Firebase控制台的推送模板里也没有自定义图标。模拟器缓存与权限问题
Android 10模拟器偶尔会有通知缓存bug,试试这些操作:- 完全卸载应用,在模拟器设置里清除应用的所有残留数据
- 重启模拟器后重新安装应用
- 检查模拟器里应用的通知权限:确保权限已开启,且没有被设置为「隐藏通知图标」
代码细节调整
试试把创建Builder的上下文换成getApplicationContext(),避免Activity上下文可能带来的异常;另外,确认你的setSmallIcon调用没有被后续的代码覆盖(比如不小心又调用了一次setSmallIcon设置成其他资源)。
我当时的问题是后端推送时误加了icon参数,加上模拟器缓存的旧Channel配置,才导致图标一直异常。你按上面的步骤逐一排查,应该能解决问题。
内容的提问来源于stack exchange,提问作者Fairuz Yassar

