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

时间:2017-12-19 12:15:16

标签: ios avfoundation watchkit watch-os watch-os-4

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

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

然而,当屏幕关闭时 - 例如通过开始锻炼然后降低手腕 - 在应用再次激活之前音频不会播放。

  1. 开始锻炼+在屏幕上保持应用程序=声音播放正常。
  2. 通过点击数字表冠+保持屏幕开启锻炼+移动应用程序到背景=声音播放正常。
  3. 开始锻炼+下手腕=屏幕关闭,声音不再播放。
  4. 开始锻炼+将应用移动到背景+降低手腕=屏幕关闭,声音不再播放。
  5. 我正在试图找出我在屏幕关闭时为锻炼应用程序支持音频而错过的内容......

    • 该应用有效HKWorkoutSession
    • 该扩展程序在WKBackgroundModes
    • 下启用了“锻炼处理”后台模式
    • 此扩展程序还在UIBackgroundModes下启用了“音频”后台模式。
    • 该扩展程序具有HealthKit权利,并且所有HealthKit功能都正常运行。
    • 在iOS应用中,我添加了'音频'背景模式。

    我试过了:

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

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

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

    我错过了什么?

2 个答案:

答案 0 :(得分:5)

啊,最后我发现了the docs帖子并意识到我遇到了同样的问题:

In source directory: CMakeLists.txt: add_subdirectory(lib_varient_1) add_subdirectory(lib_varient_2) LibSources.cmake: set(SOURCES "${CMAKE_CURRENT_LIST_DIR}/Source1.cpp" "${CMAKE_CURRENT_LIST_DIR}/Source2.cpp" ...) set_source_files_properties(${SOURCES} PROPERTIES COMPILE_FLAGS "/Yu\"stdafx.h\"" "/Fp\"${CMAKE_CURRENT_BINARY_DIR}/stdafx.pch\"") set_source_files_properties(${SOURCES} PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/stdafx.pch") set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/stdafx.cpp PROPERTIES COMPILE_FLAGS "/Yc\"stdafx.h\"" "/Fp\"${CMAKE_CURRENT_BINARY_DIR}/stdafx.pch\"") set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/stdafx.cpp PROPERTIES OBJECT_OUTPUTS "${CMAKE_CURRENT_BINARY_DIR}/stdafx.pch") add_library(lib_varient_${VARIENT} ${SOURCES} stdafx.cpp) In lib_varient_1 CMakeLists.txt: set(VARIENT 1) include(../LibSources) In lib_varient_2 CMakeLists.txt: set(VARIENT 2) include(../LibSources) 类别需要设置为AVAudioSession(我将其设置为环境)。

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

答案 1 :(得分:1)

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

Refrence HKWorkoutSession

  

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