我有一个播放音乐的应用程序。
我正在使用以下代码来收听 MPMusicPlayerController 的播放状态更改以更新 UI。更准确地说,我在播放和暂停之间切换播放按钮的外观。
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver: self
selector: @selector (handle_NowPlayingItemChanged:)
name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification
object: self.musicPlayer];
[notificationCenter addObserver: self
selector: @selector (handle_PlaybackStateChanged:)
name: MPMusicPlayerControllerPlaybackStateDidChangeNotification
object: self.musicPlayer];
[self.musicPlayer beginGeneratingPlaybackNotifications];
这在iPod Touch (iOS 5)和iPhone 3GS (iOS 5)上效果很好。每次播放状态更改时,我都会收到以下回调:
[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1
其中 1 表示MPMusicPlaybackStatePlaying
。
但是,如果我在iPad 1 (iOS 5)、iPad 2 (iOS 5)或iPad 3 (iOS 6)上运行相同的程序,我会得到以下序列,而不仅仅是一个回调:
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 2
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 2
其中 2 表示MPMusicPlaybackStatePaused
并导致我的应用程序在 UI 中显示错误的状态,因为实际上正在播放歌曲。
有趣的是,有时顺序是
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 2
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 2
-[JBMediaPlayer handle_PlaybackStateChanged:] :: playbackState: 1
最终以 1 正确结束MPMusicPlaybackStatePlaying
,但是回调被调用 5 次并具有交替值仍然没有意义。
关于如何解决这个问题的任何想法或建议我还能测试什么来缩小问题范围?
由于到目前为止我还没有在这里收到答案,因此我还将问题交叉发布到Apple 开发者论坛:https ://devforums.apple.com/thread/158426