获取当前的 MPMediaQuery 或 MPMediaItemCollection

Posted

技术标签:

【中文标题】获取当前的 MPMediaQuery 或 MPMediaItemCollection【英文标题】:Get the current MPMediaQuery, or MPMediaItemCollection 【发布时间】:2011-12-20 15:01:32 【问题描述】:

我正在尝试获取队列中下一首歌曲的封面,

我一直在用这个

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

    NSArray *arrayOfItems = [assetQuery items];

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

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

但今天我发现播放列表有自己的队列,而且由于我使用的是 iPodMusicPlayer,

如果用户从 iPod 音乐播放器播放播放列表中的歌曲到我的应用程序,他/她将看到下一个项目的错误封面。

有没有办法?

喜欢

[musicPlayer nowPlayingSong];

可能是这样的

[musicPlayer nowPlayingQuery];

请回答,谢谢

【问题讨论】:

显示你正在创建音乐播放器的代码 musicPlayer = [MPMusicPlayerController iPodMusicPlayer]; 【参考方案1】:

没有。 Apple 不提供对当前播放列表的访问权限。这使得编码很难替代内置音乐播放器。

我不知道为什么 Apple 会为 ipod 音乐库提供 SDK,但不提供对音乐控制器的完全访问权限。

它也很麻烦。

【讨论】:

【参考方案2】:

我.. 有点.. 找到了一个半途而废的解决方法。

您可以访问播放列表,并且您可以知道某些播放列表中歌曲的当前索引。很可能,如果歌曲真的在多个播放列表中找到 - 更有可能它的索引会不同..(但可能相同!)

所以 - 我找出当前歌曲的持久ID:

_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++;
        
    
    //===

不完美,但是嘿..总得做点什么吧?

【讨论】:

以上是关于获取当前的 MPMediaQuery 或 MPMediaItemCollection的主要内容,如果未能解决你的问题,请参考以下文章

快速使用 MPMediaQuery 获取索引 uitableview 的专辑标题?

IOS::如何获取 MPMediaquery Songsquery Artwork

iPhone 获取所有专辑/艺术家

无法理解 MPMediaQuery 的行为

从 iOS 媒体库中获取所有艺术家的列表

iOS 模拟器中的 MPMediaQuery