iphoneeventsmpmusicplayercontrollermpmediaitem

Using MPMusicPlayerController play a MPMediaItemCollection, how to get the event of at end of playing


I'm using the MPMusicPlayerController to play MPMediaItems in a MPMediaItemCollection. How can I fire an event when the MPMediaItems are done playing?


Solution

  • Register for MPMusicPlayerControllerPlaybackStateDidChangeNotification notifications:

    [notificationCenter addObserver:self selector:@selector(handlePlaybackStateChanged:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:self.musicPlayer];
    

    and tell your musicPlayerController to generate those notifications:

    [self.musicPlayerController beginGeneratingPlaybackNotifications];
    

    In handlePlaybackStateChanged: you can check the playbackState property of musicPlayerController:

    - (void)handlePlaybackStateChanged:(NSNotitication*)notification
    {
        if (self.musicPlayerController.playbackState == MPMusicPlaybackStateStopped ||
            self.musicPlayerController.playbackState == MPMusicPlaybackStateInterrupted ||
            self.musicPlayerController.playbackState == MPMusicPlaybackStatePaused) {
            // do your stuff
        }
    }