HarmonyOS鸿蒙Next中安卓app的下载通知,下拉通知栏中,左侧图标不显示

HarmonyOS鸿蒙Next中安卓app的下载通知,下拉通知栏中,左侧图标不显示

NotificationCompat.Builder notificationBuilder.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.icon_notify_pure)//app图标
.setCustomContentView(downloadRview)//自定义的下载进度view,有title,progress
.setOnlyAlertOnce(true)
.setStyle(new NotificationCompat.DecoratedCustomViewStyle())
.setCategory(Notification.CATEGORY_PROGRESS);

更多关于HarmonyOS鸿蒙Next中安卓app的下载通知,下拉通知栏中,左侧图标不显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

检查图标是否存在

更多关于HarmonyOS鸿蒙Next中安卓app的下载通知,下拉通知栏中,左侧图标不显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


是存在的,我在我的小米手机上是正常显示的,但是我这个华为的鸿蒙4.2的设备不显示,只显示了我自定义的view,下载的标题和进度条

使用R.drawable加载png图标试试

还是不行,我在想是不是因为用了自定义的通知view导致的。我其他比较简单的通知,直接采用的是NotificationCompat.Builder,没用RemoteViews,都能正常显示左侧的图标

背景知识:

从 Android 5.0 开始,通知栏为了风格统一,会强制将你设置的小图标渲染成统一的单色(通常是白色)。系统实际只使用图标外轮廓的 Alpha 通道。如果你放一个有背景色的图标,或者图标本就是纯白色,它就可能看起来“不显示”或只显示一个白色方块

问题解决:

将图片修改为一个没有背景色的图片,去掉背景色为透明,将具体的轮抗画上去如下:

cke_5072.png

你这个现象基本是 “自定义通知布局把系统的标准头部(含左侧 smallIcon)覆盖掉了”smallIcon 资源不符合通知图标规范 导致的,常见在下载进度这种自定义 RemoteViews 通知里。

1)setCustomContentView() 会覆盖系统布局

  • 你设置了 setCustomContentView(downloadRview),系统就按你的 RemoteViews 来画通知内容;
  • 如果你的 downloadRview 里没有放一个 ImageView 显示图标,下拉通知栏这一行左侧自然可能看不到图标。

虽然你用了 new NotificationCompat.DecoratedCustomViewStyle(),但它 只在 Android 7.0(API24)+ 才能稳定把“系统头部(含 small icon/app 名称/时间)”装饰出来;在 Android 6/7 以下 或部分 ROM(尤其国产定制)上,经常还是会“只显示自定义布局”,导致看不到系统小图标。

解决办法(最稳):

  • downloadRview 对应的布局里加一个 ImageView,然后:
downloadRview.setImageViewResource(R.id.iv_icon, R.drawable.ic_stat_download);

2)通知 smallIcon 不能用启动图标(彩色/自适应)那种

setSmallIcon(R.mipmap.icon_notify_pure) 如果本质还是 应用启动图标/彩色大图/自适应图标,在很多系统上会被当成“不合规”处理,表现为:

  • 状态栏/通知栏不显示或显示为空白块
  • 颜色被强制变成纯白但背景不透明导致看起来“消失”

正确做法:

  • 准备一个 纯白单色、透明背景 的小图标(建议 24dp 的矢量或 PNG),放在 drawable/,例如 R.drawable.ic_stat_download
  • 然后:
.setSmallIcon(R.drawable.ic_stat_download)

(不要用 mipmap 里那种 launcher 图标)

可选:如果你想给小图标着色:

.setColor(0xFF2196F3) // 仅影响 small icon 的 tint(不同版本表现略有差异)

3)更推荐的下载进度通知(不自定义布局也能有进度)

如果你只是“title + progress”,其实系统原生就支持,兼容性最好:

NotificationCompat.Builder b = new NotificationCompat.Builder(ctx, CHANNEL_ID)
  .setSmallIcon(R.drawable.ic_stat_download)
  .setContentTitle("正在下载…")
  .setOnlyAlertOnce(true)
  .setOngoing(true)
  .setProgress(100, progress, false);

会不会是鸿蒙要求:通知小图标必须是【纯白色透明背景】的矢量图 / PNG,且命名、资源类型必须符合安卓规范,否则直接不显示。

你按照这个步骤来操作

  1. 把图标改成纯白色、透明背景
  2. 移动到 res/drawable-xxhdpi
  3. 代码里把 mipmap 改成 drawable
  4. 卸载 App 重装,然后再看看

HarmonyOS Next 对安卓应用通知图标有独立规范:左侧图标需使用 NotificationRequest.setSmallIcon() 设置资源 ID,且资源需存放在应用资源的 medianotification_icon 目录,否则系统可能不显示。若应用未按此规则配置图标资源,则通知栏左侧图标会缺失。

HarmonyOS Next(鸿蒙NEXT)已完全移除 AOSP 代码,不再支持安卓应用,因此不存在安卓通知图标不显示的问题。
如果您指的是兼容安卓的 HarmonyOS 2.0/3.1 版本,该问题通常是因为 setSmallIcon 使用的图标不符合通知栏显示规范:系统会对小图标进行颜色遮罩处理(转为纯色),要求图标本身为透明背景、单色白色或自带透明通道的矢量图形。您的 R.mipmap.icon_notify_pure 很可能是彩色或非透明背景的 PNG,会被整体染色导致不可见。请替换为符合规范的 Adaptive Icon 或带透明通道的单色 PNG 资源。

回到顶部