我正在尝试构建一个守望套应用程序,该应用程序将在锻炼过程中提供音频反馈。音频是一系列简短的预录制语音剪辑。
- 该应用开始锻炼会话
- 音频剪辑在应用程序为活动 时播放正常
- 当应用在屏幕上时,音频也可以很好地播放(例如,通过点击数字冠或打开另一个应用程序)。
但是,当屏幕关闭时 - 例如通过启动锻炼然后降低手腕 - 音频直到应用再次处于活动状态才会播放。
即。
- 开始锻炼 在屏幕上保持应用程序=声音播放正常。
- 启动锻炼 通过敲击数字冠 保持屏幕=正常播放,将应用程序移至背景。
- 开始锻炼 下手腕=屏幕关闭并听起来不再播放。
- 开始锻炼 将应用程序移至背景 下手腕=屏幕关闭,声音不再播放。
我试图弄清楚我错过了什么,以便在屏幕关闭时在锻炼应用中支持音频...
- 该应用具有一个活动
HKWorkoutSession
。 - 扩展程序在
WKBackgroundModes
下启用了"锻炼"背景模式 - 扩展程序还具有
UIBackgroundModes
下启用的"音频"背景模式。 - 扩展名具有HealthKit权利,所有HealthKit功能都在起作用。
- 在iOS应用程序上,我添加了"音频"背景模式。
我尝试过:
- 使用
AVAudioPlayer
播放音频剪辑 - 使用
AVAudioEngine
AVAudioPlayerNode
播放音频 - 完全放弃剪辑并使用Avspeechsynthesizer
行为是相同的 - 屏幕关闭后,声音不再播放。如果该应用在后台,并且屏幕仍在打开。
,声音确实会播放。该应用程序在手表操作系统4上运行。我已经在系列2和系列3手表上进行了测试。
我错过了什么?
ahhh,终于我找到了这篇文章,意识到我有同样的问题:
AVAudioSession
类别需要设置为AVAudioSessionCategoryPlayback
(我将其设置为环境)。
一旦我将会话类别更改为AvaudiosessionCategoryPlayBack,就可以使用!
在背景中播放音频时,您还需要将UibackgroundModes设置为扩展名PLIST中的"音频",除了设置"锻炼处理"背景模式。
折扣hkworkoutsession
要播放音频或提供背景的触觉反馈,还必须将UibackgroundModes密钥添加到WatchKit Extension的Info.plist文件中。该密钥的值是包含音频值的数组。