ios - 更新 MPRemoteCommandCenter 播放/暂停按钮

标签 ios cocoa-touch mpnowplayinginfocenter control-center

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

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

我尝试过的解决方案:

  • playCommandpauseCommand 上设置 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/

相关文章:

ios - MPNowPlayingInfoCenter - 当音频暂停时耗时继续计数

ios - iOS 7 上的 MPNowPlayingInfoCenter AVPlayer

ios - iOS多人游戏-Game Center和Facebook Connect

ios - UICollectionView 不会在 RTL 中从右到左填充数据

ios - 如何从 CGFloat 数组创建 CIVector?

ios - 如何将 UISearchbar 和 Searchdisplaycontroller 与多个 TableView 一起使用?

ios - 在函数外部传递变量以在 Swift 3 中使用

ios - NSDateFormatter 日期从字符串 : returns nil

ios - UITableViewCell 显示混合字体

ios - 设置 MPNowPlayingInfoCenter 与其他背景音频播放