繁体   English   中英

更新 MPRemoteCommandCenter 播放/暂停按钮

[英]Update MPRemoteCommandCenter play/pause button

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

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

我尝试过的解决方案:

  • playCommandpauseCommandenabled设置

    没有效果

  • MPNowPlayingInfoCenter MPNowPlayingInfoPropertyPlaybackRate0

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

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

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

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

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

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

您可以使用https://developer.apple.com/documentation/mediaplayer/mpnowplayingplaybackstate?language=objc

MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = MPNowPlayingPlaybackStatePlaying;

或者

MPNowPlayingInfoCenter.defaultCenter.nowPlayingInfo = MPNowPlayingPlaybackStatePaused;

可从 iOS 13.0 获得

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM