5

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

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

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

IE

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

我试图弄清楚我错过了什么,以便在屏幕关闭时支持锻炼应用程序中的音频......

  • 该应用程序有一个活跃的HKWorkoutSession.
  • 该扩展在下启用了“锻炼处理”后台模式WKBackgroundModes
  • 该扩展程序还启用了“音频”背景模式UIBackgroundModes
  • 该扩展程序具有 HealthKit 权利,并且所有 HealthKit 功能都可以正常工作。
  • 在 iOS 应用上,我添加了“音频”背景模式。

我试过了:

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

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

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

我错过了什么?

4

2 回答 2

5

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

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

一旦我将会话类别更改为 AVAudioSessionCategoryPlayback 它就起作用了!

于 2017-12-19T22:26:45.723 回答
1

要在后台播放音频,除了设置“锻炼处理”后台模式外,您还需要在扩展 plist 中将 UIBackgroundModes 设置为“音频”。

参考 HKWorkoutSession

要从后台播放音频或提供触觉反馈,您还必须将 UIBackgroundModes 键添加到 WatchKit 扩展的 Info.plist 文件中。该键的值是一个包含音频值的数组。

于 2017-12-19T19:17:22.287 回答