2

私は NSNotificationCenter からの通知を使用して MPMusicPlayerController 通知を受け取ります。

これらの通知を使用して、ビュー内のボタンの状態を「再生」状態から「一時停止」状態に変更します。

「動作」しますが、MPMusicPlayerController (正確には iPodMusicPlayer) が正しい状態を報告しないことがあるため、ボタンがすべてめちゃくちゃになり、正しく動作しません。

調べてみると、現在再生中の曲を変更すると、通知が頻繁にトリガーされることがわかりました。

例: 曲を選択するときは、次のように呼び出します。 - stop - setQueueWIthItemCOlllection - nowPlayingItem - play

これらの呼び出しは、非常に多くの通知を起動します。停止後、nowPlayingItem 呼び出しの後に、たとえば nowPlayingItem について 2 回通知されます... ???

また、MPMusicPlayerController の再生状態ではなく、「画像」の状態に関連してボタンを強制的に動作させた後でも、コントローラーは正しい状態を反映しません。たとえば、曲はバックグラウンドで再生されます (聞こえます。ipad の右上のバッテリー アイコンの横に「再生」アイコンが表示されます)、MPMusicPlayerController iPodMusicPlayer は状態「一時停止」を報告します。 .

誰かがこれに関する情報やヘルプを持っていますか?

乾杯

4

1 に答える 1

0

これと同じ問題があったと思いますが、それを修正するには次の 2 つのことを行う必要があることがわかりました。

1) 着信 MPMediaItemCollection の項目配列をコピーし、それを使用して新しい MPMediaItemCollection を作成します。

2) プレーヤーで nowPlayingItem または currentPlaybackTime のいずれか (または両方) を設定します。

これら 2 つのことを行うと、音楽プレーヤーから受け取った通知が予想された回数だけ生成され、すべての通知に (プレーヤーの実際の状態を反映した) 正確な 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;
    }
    //
}
于 2012-08-15T07:56:01.317 に答える