更新 MPRemoteCommandCenter 播放/暂停按钮

Jay*_*son 6 cocoa-touch ios mpnowplayinginfocenter control-center

我有一个 iOS 9 应用程序,它使用 AudioGraph 播放类似 MIDI 的歌曲。我已经设置了远程控制命令MPRemoteCommandCenter和信息,MPNowPlayingInfoCenter以便当前播放的歌曲显示在控制中心,并响应控制中心按钮按下或耳机按钮按下。轻按控制中心中的暂停按钮会暂停我的歌曲,但控制中心中的播放头会一直移动并且按钮保持为暂停图标。再次点击它只会继续调用暂停。

有没有办法更新MPNowPlayingInfoCenterMPRemoteCommandCenter状态,以便控制中心知道歌曲已暂停?

我尝试过的解决方案:

  • 设置enabledplayCommandpauseCommand

    没有效果

  • 设置MPNowPlayingInfoPropertyPlaybackRate0MPNowPlayingInfoCenter

    停止播放头前进(如果我没有明确设置它,并重置经过的时间),但该按钮仍然是一个暂停按钮

  • 停止我的音频引擎并呼叫 AVAudioSession.setActive(false)

    这似乎确实有效,但速度很慢,导致音频故障,即使歌曲暂停,我的应用程序的其他部分也依赖音频引擎运行

Jas*_*sey 2

看来 MPRemoteCommandCenter 知道音频已暂停的唯一方法是停止流式传输,因此您的问题的答案似乎是“否”。遗憾的是我们无法直接控制控制中心的运输控制状态……

由于您的应用程序需要持续的音频流,因此您的最佳选择似乎是放弃控制中心音频传输支持。也许中间立场是取消对播放和暂停的支持,同时保留当前播放音频的时间线(正如您上面所说,您可以通过将 MPNowPlayingInfoPropertyPlaybackRate 设置为 0 来停止时间线)。

就我而言,按下控制中心的暂停按钮后,仅当我停止流式传输音频时才会显示控制中心播放按钮(在我的情况下,这意味着在我的 AVAudioEngine 实例上调用停止,并且在我的情况下不需要设置我的 AVAudioSession至不活动)。停止流式传输还会暂停控制中心的时间线,因此对于采用“停止流式传输”解决方案的其他人来说,您无需费力设置 MPNowPlayingInfoPropertyPlaybackRate。