我有一个 iOS 9 应用程序,它使用 AudioGraph 播放类似 MIDI 的歌曲。我已经使用 MPRemoteCommandCenter
设置了远程控制命令,并使用 MPNowPlayingInfoCenter
设置了信息,这样当前正在播放的歌曲就会显示在控制中心中,并对控制中心按钮按下或耳机按钮按下做出响应.点击 Control Center 中的暂停按钮可暂停我的歌曲,但 Control Center 中的播放头会继续移动并且该按钮仍保持为暂停图标。再次点击它只会继续调用暂停。
有没有办法更新 MPNowPlayingInfoCenter
或 MPRemoteCommandCenter
状态,以便控制中心知道歌曲已暂停?
我尝试过的解决方案:
在
playCommand
和pauseCommand
上设置enabled
没有影响
在
MPNowPlayingInfoCenter
中将MPNowPlayingInfoPropertyPlaybackRate
设置为0
停止播放头前进(如果我没有明确设置它也会重置耗时),但按钮仍然是暂停按钮
停止我的音频引擎并调用
AVAudioSession.setActive(false)
这似乎有效,但它很慢,会导致音频故障,而且我的应用程序的其他部分依赖于音频引擎运行,即使歌曲暂停也是如此
最佳答案
似乎 MPRemoteCommandCenter 知道音频暂停的唯一方法是停止流式传输,因此您的问题的答案似乎是“否”。很遗憾,我们无法直接控制控制中心的传输控制状态......
由于您的应用需要持续的音频流,您最好的选择似乎是放弃控制中心音频传输支持。或许折衷方案是取消对播放和暂停的支持,同时保留当前播放音频的时间线(正如您上面所说,您可以通过将 MPNowPlayingInfoPropertyPlaybackRate 设置为 0 来停止时间线)。
在我的例子中,按下 Control Center 的暂停按钮后,只有当我停止流式传输音频时才会显示 Control Center 播放按钮(在我的例子中,这意味着在我的 AVAudioEngine 实例上调用停止,并且在我的例子中没有必要将我的 AVAudioSession 设置为不活动)。停止流式传输也会暂停控制中心的时间线,因此对于其他采用“停止流式传输”解决方案的人来说,您无需设置 MPNowPlayingInfoPropertyPlaybackRate。
关于ios - 更新 MPRemoteCommandCenter 播放/暂停按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36754934/