当背景和屏幕关闭时,在WatchKit锻炼应用程序中播放音频

Joh*_*tin 5 avfoundation ios watchkit watchos watchos-4

我正在尝试构建一个WatchKit应用程序,它将在锻炼期间提供音频反馈.音频是一系列短预先录制的语音片段.

  • 该应用程序开始锻炼会话
  • 当应用处于活动状态时,音频剪辑可以正常播
  • 当屏幕打开时应用程序处于后台时(例如,通过点击数字表冠或打开另一个应用程序),音频也可以正常播放.

但是,当屏幕关闭时 - 例如通过开始锻炼然后降低手腕 - 音频不会播放,直到应用再次激活.

  1. 开始锻炼+在屏幕上保持应用程序=声音播放正常.
  2. 通过点击数字表冠+保持屏幕开启锻炼+移动应用程序到背景=声音播放正常.
  3. 开始锻炼+下手腕=屏幕关闭,声音不再播放.
  4. 开始锻炼+移动应用程序到背景+下手腕=屏幕关闭,声音不再播放.

当屏幕关闭时,我正在试图找出我为了支持锻炼应用程序中的音频而错过了什么...

  • 该应用已激活HKWorkoutSession.
  • 该扩展程序启用了"锻炼处理"后台模式 WKBackgroundModes
  • 扩展程序还启用了"音频"后台模式UIBackgroundModes.
  • 该扩展具有HealthKit权利,并且所有HealthKit功能都在运行.
  • 在iOS应用程序中,我添加了"音频"后台模式.

我试过了:

  • 使用播放音频剪辑 AVAudioPlayer
  • AVAudioEngine+ 播放音频AVAudioPlayerNode
  • 完全放弃剪辑并使用AVSpeechSynthesizer

行为是相同的 - 一旦屏幕关闭,声音就不再播放.如果应用程序在后台并且屏幕仍然打开,则会播放声音.

该应用程序在Watch OS 4上运行.我已经在Series 2和Series 3手表上进行了测试,两者都是相同的.

我错过了什么?

Joh*_*tin 5

啊,最后我找到了这篇文章并意识到我遇到了同样的问题:

AVAudioSession类别需要设置为AVAudioSessionCategoryPlayback(我将其设置为环境).

只要我将会话类别更改为AVAudioSessionCategoryPlayback就可以了!