2011-12-20 36 views
0

我想獲得下一首歌曲是在隊列中的封面,獲取當前MPMediaQuery,或MPMediaItemCollection

我一直在使用這種

MPMediaQuery* assetQuery = [[MPMediaQuery alloc] init]; 

    NSArray *arrayOfItems = [assetQuery items]; 

    MPMediaItem *mediaItem = [arrayOfItems objectAtIndex:[musicPlayer indexOfNowPlayingItem] + 1]; 

    NSLog(@"%@", [mediaItem valueForProperty:MPMediaItemPropertyTitle]); 

但今天我發現,播放列表有自己的隊列,並且由於我使用的是iPodMusicPlayer,因此如果用戶來自播放播放列表中的歌曲的iPod音樂播放器,則可能會看到我的應用的錯誤封面下一個項目。

有沒有辦法獲得當前MPMediaQuery或MPMediaItemCollection?

[musicPlayer nowPlayingSong];

可能像

[musicPlayer nowPlayingQuery]

請回答,謝謝

+0

顯示您創建musicPlayer的代碼 –

+0

musicPlayer = [MPMusicPlayerController iPodMusicPlayer]; –

回答

-1

號蘋果不提供訪問到當前播放列表。這使編碼成爲內置音樂播放器的體面替代品相當困難。

我不知道蘋果爲什麼會爲ipod音樂庫提供SDK,但不能完全訪問音樂控制器。

它也有很多錯誤。

0

我..還挺..找到一個半工作的解決方法。

您可以訪問播放列表,並且您可以在某些播放列表中瞭解歌曲的當前索引。那麼很可能,如果歌曲在多個播放列表確實發現 - 更可能是指數將不同..

所以 - 我發現當前歌曲persistentID(但可能是一樣的!):

_nowPlayingIPodItemPersistantID = [[[[MPMusicPlayerController iPodMusicPlayer] nowPlayingItem] 
     valueForProperty:MPMediaItemPropertyPersistentID] stringValue]; 

和然後嘗試找出哪個播放列表是通過積極與indexOfNowPlayingItem每首歌曲,這是persistentID等於當前歌曲比較persistentID:

MPMediaQuery *query = [MPMediaQuery playlistsQuery]; 

    int count = 0; 

    for (MPMediaPlaylist *playlist in [query collections]) 
    { 
     if(_nowPlayingIPodCollectionItemPersistantID) 
     { 
      break; 
     } 

     count = 0; 

     for(MPMediaItem *item in [playlist items]) 
     { 
      if([[[item valueForProperty:MPMediaItemPropertyPersistentID] stringValue] isEqualToString:_nowPlayingIPodItemPersistantID] 
       && [[MPMusicPlayerController iPodMusicPlayer] indexOfNowPlayingItem] == count) 
      { 
       _nowPlayingIPodCollectionItemPersistantID = [playlist valueForProperty: MPMediaPlaylistPropertyName]; 

       break; 
      } 

      count++; 
     } 
    } 
    //=== 

並不完美,但嘿..必須做的事端,對不對?