问题
I have a bit of a strange problem. I have a music app that uses the [MPMusicPlayerController iPodMusicPlayer]
. Everything is fine, notifications are fired for track changes and changes in playback state.
I have one screen where the user needs to review one single song, I don't want him to go on to the next song in his queue. Since there is no delegate method for when a track WILL change (only DID change), to prevent the music player from continuing to the next track I use a new [MPMusicPlayerController applicationMusicPlayer]
, give it iPodMusicPlayer's currently playing song and all is well. No new tracks to continue to, and I'm not touching the original iPodMusicPlayer
queue so in theory, when I close this screen and use the iPodMusicPlayer
again, all should be perfectly fine.
However, when the user is done on this screen and closes it, iPodMusicPlayer
is now suddenly broken, notifications are not called and when I put the app to the background, music stops playing, causing me to believe that iPodMusicPlayer
is now actually applicationMusicPlayer
.
Okay so my question is basically: I need a way to prevent the music player to continue on to the next track in the queue. Switching to applicationMusicPlayer with one track seems to break stuff, as explained above. What's the best solution?
EDIT: because this might be a bit difficult to understand, I created a small project to show the problem: https://github.com/kevinrenskers/MPMusicPlayerControllerTest. Open the app while music is playing, see that the play button behaves correctly. Now open the popup, close it again and the play button is broken.
回答1:
I found a solution to my problem: set the repeatMode
to MPMusicRepeatModeOne
and then catch the MPMusicPlayerControllerNowPlayingItemDidChangeNotification
notification. You can stop the playback and you never continue to the next track. Once I'm done with the second screen I reset the repeatMode
to the original value.
来源:https://stackoverflow.com/questions/10984203/mpmusicplayercontroller-combine-ipodmusicplayer-and-applicationmusicplayer-to-p