获取当前的 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 的专辑标题?