MPNowPlayingInfoCenter not reacting properly when pausing playback
I've the solution! Set only the MPMediaItemPropertyPlaybackDuration
1 - When you start the track, set the property with the total duration of the track:
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];NSDictionary *songInfo = @{ MPMediaItemPropertyTitle: title, MPMediaItemPropertyArtist: artist MPMediaItemPropertyPlaybackDuration : [NSNumber numberWithFloat:length]};center.nowPlayingInfo = songInfo;
2 - when you pause the track... do nothing.
3 - when you play the track, set the property with the currentTrackTime:
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];NSMutableDictionary *playingInfo = [NSMutableDictionary dictionaryWithDictionary:center.nowPlayingInfo]; [playingInfo setObject:[NSNumber numberWithFloat:player.currentTrackTime] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime]; center.nowPlayingInfo = playingInfo;
Here what you searching, this working very good add this to your Class:
- (void)remoteControlReceivedWithEvent: (UIEvent *) receivedEvent { if (receivedEvent.type == UIEventTypeRemoteControl) { switch (receivedEvent.subtype) { case UIEventSubtypeRemoteControlTogglePlayPause:[self playPause:nil]; break; default: break; } }}
you can add functions for forward or backward with adding other CASE code like this:
case UIEventSubtypeRemoteControlBeginSeekingBackward:[self yourBackward:nil]; break;
and to calling play pause you need to create a action like this:
- (IBAction)playPause:(id)sender { if (yourPlayer.rate == 1.0){ [yourPlayer pause]; } else if (yourPlayer.rate == 0.0) { [yourPlayer play]; }}
Important: any case you adding need the IBAction
Hope this help you
MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];NSDictionary *songInfo = @{ MPMediaItemPropertyTitle: title, MPMediaItemPropertyArtist: artist};
the call like
center setnowPlayingInfo = songInfo;