2012-05-29 3 views
2

NSNotificationCenter의 알림을 사용하여 MPMusicPlayerController 알림을받습니다.MPMusicPlayerController : 너무 많은 알림

나는이보기를 사용하여 내보기의 버튼 상태를 "재생"에서 "일시 중지"상태로 변경합니다.

MPMusicPlayerController (정확히는 iPodMusicPlayer)가 정확한 상태를보고하지 않아서 버튼이 엉망이되어 정상적으로 작동하지 않는 경우가 있습니다.

조사를 해본 결과, 현재 재생중인 노래를 변경할 때 알림이 많이 발생한다는 것을 발견했습니다.

예를 들어

: 내가 노래를 선택하면 , 나는 전화 : 을 - 중지 - setQueueWIthItemCOllection - nowPlayingItem -

이러한 호출을 재생, 많은 알림을 시작합니다. 중지 후, nowPlayingItem 호출 이후 nowPlayingItem에 대해 2 번 통보받습니다 ... ???

또한 내 단추가 MPMusicPlayerController 재생 상태가 아닌 "그림"상태를 기준으로 동작하도록 강요 한 후에도 컨트롤러는 여전히 올바른 상태를 반영하지 않습니다. 예를 들어 노래가 백그라운드에서 재생됩니다 (배터리 아이콘 옆에있는 ipad의 맨 오른쪽에있는 "재생"아이콘이 들립니다). 그러나 MPMusicPlayerController iPodMusicPlayer는 "일시 중지"상태를보고합니다. ..

아무도 이것에 어떤 정보 또는 도움이 있습니까?

건배

+0

, 우리는 도움을 줄 수 있습니다. – Klaas

+0

많은 긴 디버그 세션이 끝나면 "끝내기"로 결정했습니다. MPMusicPlayerController 대신 AVPlayer로 되돌아갑니다 ... 제목을 닫을 수 있습니다 ... – teuteuguy

+0

글쎄, 아직 종료하지 않았지만, 확실하게 몇 가지 알림을 여러 번 보내고 잘못된 순서로 보내고 있습니다. – Klaas

답변

0

는 나는이 같은 문제를했고 내가 그것을 해결하기 위해 두 가지해야 할 일을했을 것으로 믿는다

1) 수신 MPMediaItemCollection의 항목 배열을 복사하고 그것으로 새로운 MPMediaItemCollection을 만듭니다

2) 플레이어에서 nowPlayingItem 또는 currentPlaybackTime을 설정하십시오 (또는 둘 모두)

내가이 두 가지를 수행하면 뮤직 플레이어로부터받은 알림에 예상되는 번호가 생성됩니다 그리고 그들은 모두 정확한 playbackStates를 가졌습니다 (플레이어의 실제 상태 반영). 이 도움이됩니다

희망 ... 당신이 코드의 일부를 제공하는 경우

-(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; 
    } 
    // 
}