在背景和屏幕关闭时在 WatchKit 锻炼应用程序中播放音频
Playing audio in a WatchKit workout app when backgrounded and screen is off
我正在尝试构建一个 WatchKit 应用程序,它将在锻炼期间提供音频反馈。音频是一系列预先录制的简短语音片段。
- 该应用开始锻炼
- 当应用处于 活动状态时
音频剪辑可以正常播放
- 当应用程序处于后台且屏幕打开时(例如,通过点击数字表冠或打开另一个应用程序),音频也可以正常播放。
但是,当屏幕关闭时 - 例如通过开始锻炼然后放下手腕 - 在应用程序再次激活之前不会播放音频。
即
- 开始锻炼 + 将应用程序保持在屏幕上 = 声音播放正常。
- 开始锻炼 + 轻按数码表冠将应用移至后台 + 保持屏幕开启 = 声音正常播放。
- 开始锻炼 + 下腕 = 屏幕关闭并且不再播放声音。
- 开始锻炼 + 将应用移至后台 + 放下手腕 = 屏幕关闭且不再播放声音。
我想弄清楚我错过了什么,以便在屏幕关闭时支持锻炼应用程序中的音频...
- 该应用有一个活跃的
HKWorkoutSession
。
- 该扩展程序在
WKBackgroundModes
下启用了 "workout-processing" 后台模式
- 该扩展程序还在
UIBackgroundModes
下启用了 "audio" 后台模式。
- 该扩展程序拥有 HealthKit 权利并且所有 HealthKit 功能都在工作。
- 在 iOS 应用程序中,我添加了 'audio' 后台模式。
我试过:
- 使用
AVAudioPlayer
播放音频剪辑
- 正在使用
AVAudioEngine
+AVAudioPlayerNode
播放音频
- 完全放弃剪辑并使用 AVSpeechSynthesizer
行为相同 - 屏幕一关闭,就不再播放声音。如果应用程序在后台并且屏幕仍然打开,声音会播放。
该应用程序在 Watch 运行 上 OS 4. 我已经在 Series 2 和 Series 3 手表上进行了测试,两者都一样。
我错过了什么?
要在后台播放音频,除了设置 "workout processing" 后台模式外,您还需要在扩展 plist 中将 UIBackgroundModes 设置为 "audio"。
To play audio or provide haptic feedback from the background, you must also add the UIBackgroundModes key to your WatchKit extension’s Info.plist file. This key’s value is an array containing the audio value.
啊啊啊,终于找到了thispost,发现我也遇到了同样的问题:
AVAudioSession
类别需要设置为 AVAudioSessionCategoryPlayback
(我将其设置为环境)。
一旦我将会话类别更改为 AVAudioSessionCategoryPlayback,它就起作用了!
我正在尝试构建一个 WatchKit 应用程序,它将在锻炼期间提供音频反馈。音频是一系列预先录制的简短语音片段。
- 该应用开始锻炼
- 当应用处于 活动状态时 音频剪辑可以正常播放
- 当应用程序处于后台且屏幕打开时(例如,通过点击数字表冠或打开另一个应用程序),音频也可以正常播放。
但是,当屏幕关闭时 - 例如通过开始锻炼然后放下手腕 - 在应用程序再次激活之前不会播放音频。
即
- 开始锻炼 + 将应用程序保持在屏幕上 = 声音播放正常。
- 开始锻炼 + 轻按数码表冠将应用移至后台 + 保持屏幕开启 = 声音正常播放。
- 开始锻炼 + 下腕 = 屏幕关闭并且不再播放声音。
- 开始锻炼 + 将应用移至后台 + 放下手腕 = 屏幕关闭且不再播放声音。
我想弄清楚我错过了什么,以便在屏幕关闭时支持锻炼应用程序中的音频...
- 该应用有一个活跃的
HKWorkoutSession
。 - 该扩展程序在
WKBackgroundModes
下启用了 "workout-processing" 后台模式
- 该扩展程序还在
UIBackgroundModes
下启用了 "audio" 后台模式。 - 该扩展程序拥有 HealthKit 权利并且所有 HealthKit 功能都在工作。
- 在 iOS 应用程序中,我添加了 'audio' 后台模式。
我试过:
- 使用
AVAudioPlayer
播放音频剪辑 - 正在使用
AVAudioEngine
+AVAudioPlayerNode
播放音频
- 完全放弃剪辑并使用 AVSpeechSynthesizer
行为相同 - 屏幕一关闭,就不再播放声音。如果应用程序在后台并且屏幕仍然打开,声音会播放。
该应用程序在 Watch 运行 上 OS 4. 我已经在 Series 2 和 Series 3 手表上进行了测试,两者都一样。
我错过了什么?
要在后台播放音频,除了设置 "workout processing" 后台模式外,您还需要在扩展 plist 中将 UIBackgroundModes 设置为 "audio"。
To play audio or provide haptic feedback from the background, you must also add the UIBackgroundModes key to your WatchKit extension’s Info.plist file. This key’s value is an array containing the audio value.
啊啊啊,终于找到了thispost,发现我也遇到了同样的问题:
AVAudioSession
类别需要设置为 AVAudioSessionCategoryPlayback
(我将其设置为环境)。
一旦我将会话类别更改为 AVAudioSessionCategoryPlayback,它就起作用了!