Android Service发送通知在AVD正常显示但华为HarmonyOS真机不显示如何解决?
- 先修改PendingIntent的标志位:将代码里
PendingIntent.getActivity(this, 0, notificationIntent, 0)的最后一位参数从0改为PendingIntent.FLAG_UPDATE_CURRENT,如果你的targetSdkVersion >=31,需要额外加上PendingIntent.FLAG_IMMUTABLE,鸿蒙对PendingIntent的标志位校验比原生Android更严格,使用0作为flag会被系统拦截。 - 检查华为手机的专属权限配置:除了基础的通知权限,还要确认两个配置:1. 通知渠道的「横幅通知」「锁屏通知」「允许提醒」开关全部开启;2. 进入手机的「应用和服务-应用启动管理」,找到你的应用,关闭自动管理,手动开启「允许自启动」「允许关联启动」「允许后台活动」三个开关,华为默认会拦截后台应用的通知弹出。
- 检查通知图标合规性:确保
R.drawable.notification_icon是符合Android规范的矢量图标,背景为透明,仅用白色绘制前景,华为系统会直接过滤不符合规范的通知图标,导致整条通知不显示,原生AVD对不规范图标的兼容度更高。 - 替换通知发送方式:如果是从后台Service发送通知,建议将普通的notify调用替换为前台Service启动逻辑:在build完Notification实例后,调用
startForeground(001, notification),同时在AndroidManifest.xml中添加前台服务权限声明<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />,华为对后台Service的行为限制非常严格,前台Service的通知优先级更高,不会被系统拦截。 - 清除渠道缓存:如果之前用同一个CHANNEL_ID创建过低优先级的渠道,系统会保留旧的配置不会被新代码覆盖,你可以直接卸载应用重装,或者修改CHANNEL_ID为全新的值重新测试。
内容的提问来源于stack exchange,提问作者Neo.Chiang
相关产品推荐
相关产品推荐

