我正试图获取队列中下一首歌曲的封面,
我一直在使用这个
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 :(得分:0)
没有。 Apple不提供对当前播放列表的访问权限。这使编码成为内置音乐播放器的一个不错的替代品。
我不知道为什么Apple会为ipod音乐库提供SDK但不能完全访问音乐控制器。
这也很麻烦。
答案 1 :(得分:0)
我......有点......找到了一个半工作的解决方法。
您可以访问播放列表,并且您可以在某些播放列表中了解当前的歌曲索引。很可能,如果在多个播放列表中确实找到了歌曲 - 它的索引更可能是不同的......(但可能是相同的!)
所以 - 我找出当前歌曲的持久性ID:
_nowPlayingIPodItemPersistantID = [[[[MPMusicPlayerController iPodMusicPlayer] nowPlayingItem]
valueForProperty:MPMediaItemPropertyPersistentID] stringValue];
然后尝试通过比较indexOfNowPlayingItem与每首歌曲来找出哪个播放列表是活动的,其中的persistentID等于当前歌曲的持久ID:
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++;
}
}
//===
不完美,但是嘿..要做点什么,对吗?