更新 MPRemoteCommandCenter 播放/暂停按钮

Posted

技术标签:

【中文标题】更新 MPRemoteCommandCenter 播放/暂停按钮【英文标题】:Update MPRemoteCommandCenter play/pause button 【发布时间】:2016-08-13 18:56:11 【问题描述】:

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

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

我尝试过的解决方案:

playCommandpauseCommand 上设置enabled

没有效果

MPNowPlayingInfoCenter 中将MPNowPlayingInfoPropertyPlaybackRate 设置为0

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

停止我的音频引擎并调用AVAudioSession.setActive(false)

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

【问题讨论】:

【参考方案1】:

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

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

在我的情况下,按下控制中心的暂停按钮后,控制中心播放按钮仅在我停止流式传输音频时才会显示(在我的情况下,这意味着在我的 AVAudioEngine 实例上调用停止,在我的情况下不需要将我的 AVAudioSession 设置为非活动状态)。停止流式传输也会暂停控制中心的时间线,因此对于采用“停止流式传输”解决方案的其他人,您无需设置 MPNowPlayingInfoPropertyPlaybackRate。

【讨论】:

是的,很遗憾,我决定不使用控制中心的播放控件。

以上是关于更新 MPRemoteCommandCenter 播放/暂停按钮的主要内容,如果未能解决你的问题,请参考以下文章

使用 MPMusicPlayerController 时无法修改 MPRemoteCommandCenter 操作

如何从 MPRemoteCommandCenter 禁用所有 MPRemoteCommand 对象

使用 MPRemoteCommandCenter 时未调用播放/暂停回调

使用 MPRemoteCommandCenter 为 AVPlayer 和 AVAudioPlayer 添加当前时间和持续时间的位置

iOS 13+ 应用程序的 AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPN

更新播放器远程控制事件的目标动作方法(MPRemoteCommand)