2012-05-29 72 views
2

我使用來自NSNotificationCenter的通知來獲取MPMusicPlayerController通知。MPMusicPlayerController:太多通知

我使用這些通知從「玩」到「暫停」狀態,我認爲改變一個按鈕的狀態。

然而,它「有效」,但有時MPMusicPlayerController(確切地說是iPodMusicPlayer)不會報告正確的狀態,因此我的按鈕會全部搞亂,並且操作不正確。

已經做了一些調查,我發現改變當前播放的歌曲時通知引發了不少。

例如: 當我選擇一首歌曲,我致電: - 停止 - setQueueWIthItemCOllection - nowPlayingItem - 玩

這些調用,推出這麼多的通知。 停止後,例如在nowPlayingItem調用後,我得到nowPlayingItem的2次通知... ???

而且,即使強迫我的按鈕的行爲相對於他們的「圖片報」的狀態,而不是MPMusicPlayerController playbackstate後,控制器仍然沒有反映正確的狀態。 例如,一首歌將在後臺播放(我能聽到它,「播放」圖標是在旁邊的電池圖標的iPad遠遠右上),但MPMusicPlayerController iPodMusicPlayer狀況報告「暫停」。 ..

沒有人有任何信息或幫助呢?

乾杯

+0

如果你提供一些你的代碼,我們也許能夠提供幫助。 – Klaas

+0

經過很長時間的調試會話後,我決定「退出」。 恢復到AVPlayer而不是MPMusicPlayerController ... 主題可以關閉... – teuteuguy

+0

嗯,我沒有退出(但),但肯定有一些通知發出多次,並在錯誤的順序.. 。 – Klaas

回答

0

我相信我有這個同樣的問題,我發現我必須做兩件事情來解決它:

1)複製傳入MPMediaItemCollection的項目數組並創建一個新MPMediaItemCollection它

2)在播放器(或兩者)上設置nowPlayingItem或當前播放時間

一旦我做了這兩件事,我從音樂播放器收到的通知就會生成預期的數字的時間,他們都擁有準確的播放狀態(反映播放器的實際狀態)。

希望這是有益...

-(void)setUserMediaItemCollection:(MPMediaItemCollection *)newUserMediaItemCollection 
{ 
    [userMediaItemCollection release]; 

    //I FOUND YOU MUST COPY THE INCOMING ITEMS TO A NEW COLLECTION 
    NSArray *combinedMediaItems = [newUserMediaItemCollection.items copy]; 
    userMediaItemCollection  = [[MPMediaItemCollection collectionWithItems: (NSArray *) combinedMediaItems] retain]; 
    [combinedMediaItems release]; 
    [self.musicPlayer setQueueWithItemCollection:userMediaItemCollection]; 
    // 


    //ALSO FOUND YOU MUST SET EITHER THE NOWPLAYING ITEM OR STARTTIME OR PLAYBACK STATE CAN BE WRONG 
    if ([[userMediaItemCollection items] count]) 
    { 
     //MPMediaItem *nowPlayingItem = [[userMediaItemCollection items] objectAtIndex:0]; 
     //[self.musicPlayer setNowPlayingItem:nowPlayingItem]; 
     NSTimeInterval startTime = 0.0; 
     musicPlayer.currentPlaybackTime = startTime; 
    } 
    // 
}