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

标签 ios avfoundation 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 watch 上进行了测试,两者都一样。

我错过了什么?

最佳答案

啊啊啊,终于找到了this发布并意识到我遇到了同样的问题:

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

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

关于ios - 在背景和屏幕关闭时在 WatchKit 锻炼应用程序中播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47886812/

相关文章:

ios - 使用 swift 保存 Spritekit 中已经实现的游戏货币

ios - 使用 UIImagePickerController iOS 从图库上传视频时视频大小发生变化?

ios - 如何在 GPUImage2 中使用 RawDataInput

ios - 我们可以在 Apple Watch 上的通知上显示与手机应用程序上不同的操作吗?

xcode - 将字典传递给 watch

ios - 检索 UITableViewCell 框架

ios - Objective-C - 简单数学的错误输出

ios - 注册我不使用的单元格对性能有很大影响吗?

iOS 7 AVCaptureTorchModeAuto 似乎无法在弱光下激活手电筒

ios - "Prepare for segue"用于 WatchKit