I have an iOS 9 app that plays MIDI-like songs using an AudioGraph. I've set up remote control commands with MPRemoteCommandCenter
and info with MPNowPlayingInfoCenter
such that the currently playing song shows up in Control Center and responds to control center button presses or headphone button presses. Tapping the pause button in Control Center pauses my song, but the playhead in Control Center keeps moving and the button remains as a pause icon. Tapping it again just keeps calling pause.
Is there a way to update the MPNowPlayingInfoCenter
or MPRemoteCommandCenter
state such that Control Center knows the song is paused?
Solutions I have tried:
Setting enabled
on playCommand
and pauseCommand
has no effect
Setting MPNowPlayingInfoPropertyPlaybackRate
to 0
in MPNowPlayingInfoCenter
stops the playhead from advancing (and resets the elapsed time if I don't explicitly set it as well), but the button is still a pause button
Stopping my audio engine and calling AVAudioSession.setActive(false)
this does seem to work, but it is slow, causes audio glitches, and other parts of my app rely on the audio engine running even if a song is paused
It appears that the only way for MPRemoteCommandCenter to know that the audio is paused is for streaming to stop, so the answer to your question appears to be "no". It is a pity that we do not have direct control over Control Center's transport control states...
Since your app requires constant audio streaming, it would seem that your best option is to forego Control Center audio transport support. Perhaps a middle ground would be to remove support for playing and pausing, while retaining the timeline of currently playing audio (as you said above, you can stop the timeline by setting MPNowPlayingInfoPropertyPlaybackRate to 0).
In my case, upon pressing Control Center's pause button, the Control Center play button is only shown if I stop streaming audio (in my case, this means calling stop on my AVAudioEngine instance, and there is no need in my case to set my AVAudioSession to inactive). Stopping streaming also pauses the Control Center's timeline, so for others taking the "stop streaming" solution, you needn't mess with setting MPNowPlayingInfoPropertyPlaybackRate.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With