【发布时间】:2012-07-07 01:09:33
【问题描述】:
我有一个播放音乐的应用程序。
我正在使用以下代码从 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) 上运行相同的程序 strong> 我得到以下序列,而不是一个回调:
-[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
【问题讨论】:
-
我遇到了完全相同的问题。你找到解决方案了吗?
标签: ios ipad mpmediaplayercontroller