文档管理中心

通知扩展消息语音播放提前退出

问题现象

申请通知扩展消息权限进行语音播报,语音播报通过SoundPool串行播放多个音频实现。文档中通知扩展进程能持续10秒,实际使用中播报3秒就停止了。

背景知识

发送通知扩展消息:当应用进程不在前台时,Push Kit会将消息内容传递给通知扩展进程,您可以在该进程中自行完成业务处理(例如:语音播报、消息内容解密等)后,返回自定义消息内容,Push Kit将弹出通知提醒。您需要在10秒内返回消息内容,否则Push Kit将默认展示原有的消息内容。

问题定位

根据日志可知:

  1. 16:58:51.707:push_manager_service启动通知扩展子进程RemoteNotificationExtensionAbility,处理扩展通知消息。

  2. 16:58:51.790:触发onReceiveMessage()回调,开始初始化SoundPool处理语音消息。

  3. 16:58:51.790:RemoteNotificationExtensionAbility子进程生命周期销毁。

    但后续音频一直在播放,直到16:58:54.420。

  4. 16:58:54.808:触发系统冻结进程,音频播放终止。

结合代码可知,在onReceiveMessage()中收到消息后,语音播报逻辑未执行完,直接返回了处理后的消息。导致RemoteNotificationExtensionAbility提前结束了生命周期,使得语音播放没有播放完就系统冻结,进程挂起。

分析结论

语音播报代码时序问题:语音播报使用异步方法执行,导致扩展通知子进程提前结束。音频处理在子进程结束后,被系统冻结无法播放。

修改建议

使用async/await处理语音播报操作,确认音频播放完成后再在onReceiveMessage()中返回处理后的消息,确保RemoteNotificationExtensionAbility没有提前退出。

常见FAQ

Q:同时收到多条扩展消息通知后,语音播放消息内容超过1分20秒终止怎么处理?

A:检查是否是确认音频播放完成后再在onReceiveMessage()中返回的通知消息,保证播放的时序。

Q:播放长语音通知扩展消息后,发现应用通知角标未发生变化。

A:请检查原始消息体是否包含角标信息,原因如下:RemoteNotificationExtensionAbility子进程存活的时间是10秒,需要在10秒内返回消息内容,否则Push Kit将默认展示原有的消息内容。语音时间过长导致播放超过10秒时,如果原始的消息体中不含角标消息,则返回的通知也不含角标信息。

在 FAQ 中进行搜索
请输入您想要搜索的关键词