2

我正在使用来自 NSNotificationCenter 的通知来获取 MPMusicPlayerController 通知。

我使用这些通知将视图中的按钮状态从“播放”状态更改为“暂停”状态。

它“工作”,但有时 MPMusicPlayerController(确切地说是 iPodMusicPlayer)没有报告正确的状态,因此我的按钮全部搞砸了,并且不能正确操作。

经过一番调查,我发现在更改当前播放的歌曲时会触发很多通知。

例如:当我选择一首歌曲时,我调用: - stop - setQueueWIthItemCOllection - nowPlayingItem - play

这些电话会发出如此多的通知。停止后,例如在 nowPlayingItem 调用之后,我收到了 2 次 nowPlayingItem 通知... ???

此外,甚至在强制我的按钮相对于它们的“图片”状态而不是 MPMusicPlayerController 播放状态之后,控制器仍然不能反映正确的状态。例如,一首歌曲将在后台播放(我能听到,“播放”图标在 ipad 右上角的电池图标旁边),但 MPMusicPlayerController iPodMusicPlayer 报告状态为“暂停”.. .

有人对此有任何信息或帮助吗?

干杯

4

1 回答 1

0

我相信我遇到了同样的问题,并发现我必须做两件事来解决它:

1) 复制传入的 MPMediaItemCollection 的 items 数组并用它创建一个新的 MPMediaItemCollection

2)在播放器(或两者)上设置 nowPlayingItem 或 currentPlaybackTime

一旦我做了这两件事,我从音乐播放器收到的通知就会生成预期的次数,并且它们都有准确的播放状态(反映播放器的实际状态)。

希望这会有所帮助...

-(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;
    }
    //
}
于 2012-08-15T07:56:01.317 回答