为何设置VISIBILITY_PRIVATE/SECRET后Android锁屏仍显示通知?
兄弟,我太懂你在华为EMUI上折腾通知设置的崩溃感了!结合你描述的情况,给你几个针对性的排查方向:
先检查系统全局锁屏通知设置
EMUI的全局锁屏通知设置优先级远高于APP自身的渠道配置,很可能是这里没调好。你可以打开系统设置,路径大概是:设置 > 通知 > 锁屏通知,看看是不是选了「显示所有通知内容」——如果是,改成「隐藏敏感内容」或者「不显示通知」,再测试你的通知效果。确认通知渠道的创建逻辑
虽然你已经卸载重装,但还是要再核对代码细节:- 确保渠道创建时确实调用了
notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE)(试试用系统原生的Notification.VISIBILITY_PRIVATE常量,而非Compat的,EMUI对系统原生常量兼容性可能更好) - 通知构建时使用的
channelId和创建渠道时的ID完全一致,别出现拼写错误 - 渠道创建代码要放在APP启动的早期(比如Application的onCreate里),确保每次启动都能正确初始化渠道
- 确保渠道创建时确实调用了
彻底清理publicVersion相关残留
即使你现在不再调用setPublicVersion,也可能存在代码残留或者缓存的旧通知影响结果。建议:- 完全注释掉所有和
publicSummaryNotificationBuilder、setPublicVersion相关的代码 - 卸载APP后,手动清理一下手机里的APP残留缓存(华为手机可以在
设置 > 应用 > 应用管理 > 已卸载应用里找到你的APP,清理残留),再重装测试
- 完全注释掉所有和
尝试全新的通知渠道ID
华为EMUI有时候会缓存旧渠道的配置,哪怕卸载重装也无法彻底清除。你可以试试创建一个全新的渠道ID(比如把原来的"my_channel"改成"my_channel_v2"),重新配置可见性后,用这个新渠道发送通知,看看是否生效。检查通知的优先级/重要性设置
如果你的通知设置了过高的优先级(比如setPriority(NotificationCompat.PRIORITY_MAX))或者重要性(NotificationManager.IMPORTANCE_HIGH),EMUI可能会强制显示通知内容。试试把优先级设为PRIORITY_DEFAULT,重要性设为IMPORTANCE_DEFAULT,再测试效果。区分原生Android和EMUI的差异
如果有条件,找一台原生Android 9的设备测试你的代码——如果原生设备上正常,那基本可以确定是EMUI的定制逻辑导致的。这时候你可以手动进入应用信息的通知设置:设置 > 应用 > 你的APP > 通知管理 > 锁屏通知,手动设置为「隐藏敏感内容」,再验证APP的代码是否能正常控制这个设置。
内容的提问来源于stack exchange,提问作者Pat Lee

