Ios5 如何在iOS上播放播放列表中的歌曲(仅限歌曲)?
我正在尝试播放iPod播放列表中的歌曲。至于播放列表可能也有视频,我只想播放其中的歌曲Ios5 如何在iOS上播放播放列表中的歌曲(仅限歌曲)?,ios5,mpmediaitem,mpmediaquery,mpmediaitemcollection,Ios5,Mpmediaitem,Mpmediaquery,Mpmediaitemcollection,我正在尝试播放iPod播放列表中的歌曲。至于播放列表可能也有视频,我只想播放其中的歌曲 MPMusicPlayerController *mp = [MPMusicPlayerController applicationMusicPlayer]; MPMediaQuery *query = [MPMediaQuery songsQuery]; query.groupingType = MPMediaGroupingPlaylist; NSArray *pla
MPMusicPlayerController *mp = [MPMusicPlayerController applicationMusicPlayer];
MPMediaQuery *query = [MPMediaQuery songsQuery];
query.groupingType = MPMediaGroupingPlaylist;
NSArray *playlists = [query collections];
BOOL found = NO;
for(MPMediaPlaylist *playlist in playlists)
{
NSString *name = [playlist valueForProperty:MPMediaPlaylistPropertyName];
if([name caseInsensitiveCompare:@"MyPlaylist"] == NSOrderedSame && [playlist count] > 0)
{
MPMediaItemCollection *collection = [MPMediaItemCollection collectionWithItems:playlist.items];
[mp setQueueWithItemCollection:collection];
found = YES;
NSLog(@"items count %d", [playlist count]);
for (MPMediaItem *item in [collection items]){
NSLog(@"%@", [item valueForKey:MPMediaItemPropertyMediaType]);
}
break;
}
}
加载包含1首歌曲和2个视频的播放列表后,输出为:
项目计数3256
256
1
如果查询的目的是检索歌曲,并且媒体项的媒体类型为MPMediaTypeMovie(256或1),我不明白为什么我也会得到视频 一种可能的解决方法是使用谓词创建自定义查询。这可以通过使用
MPMediaQuery
items
数组而不是collections
数组来实现。collections
数组是MPMediaItemCollection
的数组。items
数组是MPMediaItem
s,因此您可以通过MPMediaItemPropertyMediaType
筛选查询MPMediaItemPropertyMediaType
仅适用于MPMediaItem
而不适用于MPMediaItemCollection
根据播放列表标题和媒体类型,使用一组谓词初始化查询。这将选择播放列表并从查询中筛选出任何视频:
NSString*playlame=@“MyPlaylist”;
MPMediaPropertyPredicate*播放谓词=[MPMediaPropertyPredicate谓词WithValue:播放名称
forProperty:MPMediaPlaylayPropertyName];
NSNumber*mediaTypeNumber=[NSNumber numberWithInteger:MPMediaTypeMusic];//==1
MPMediaPropertyPredicate*mediaTypePredicate=[MPMediaPropertyPredicate谓词WithValue:mediaTypeNumber
forProperty:MPMediaItemPropertyMediaType];
NSSet*predicateSet=[NSSet setWithObjects:PlayPredicate,mediaTypePredicate,nil];
MPMediaQuery*mediaTypeQuery=[[MPMediaQuery alloc]initWithFilterPredicates:predicateSet];
[mediaTypeQuery setGroupingType:MPMediaGroupingPlaylist];
如果您从MPMediaQuery
集合
数组返回数组,这些MPMediaPropertyPredicate
将不会过滤。您应该在日志语句中看到除1以外的媒体项类型:
NSArray*播放列表集合=[mediaTypeQuery集合];
[播放列表集合枚举对象使用块:^(MPMediaPlaylist*播放列表,整数idx,布尔*停止){
NSLog(@“播放列表标题:%@,[Playlist valueForProperty:MPMediaPlaylistPropertyName]);
NSArray*歌曲=[播放列表项];
[歌曲enumerateObjectsUsingBlock:^(MPMediaItem*歌曲,整数idx,布尔*停止){
NSString*songTitle=[song valueForProperty:MPMediaItemPropertyTitle];
NSInteger mediaValue=[[song valueForProperty:MPMediaItemPropertyMediaType]integerValue];
如果(mediaValue!=1)
NSLog(@“title:%@-媒体类型值:%d”,songTitle,mediaValue);
}];//此处应返回其他媒体类型。
}];
如果从MPMediaQuery
项返回数组,则MPMediaPropertyPredicate
将进行筛选:
NSArray*playlitems=[mediaTypeQuery项];
[PlayItems enumerateObjectsUsingBlock:^(MPMediaItem*歌曲、整数idx、布尔*停止){
NSString*songTitle=[song valueForProperty:MPMediaItemPropertyTitle];
NSInteger mediaValue=[[song valueForProperty:MPMediaItemPropertyMediaType]integerValue];
如果(mediaValue!=1)
NSLog(@“title:%@-媒体类型值:%d”,songTitle,mediaValue);
}];//此处不应返回任何内容。
您还可以只使用songsQuery
上的mediatype谓词,将媒体类型筛选器应用于整个库:
MPMediaQuery*query=[MPMediaQuery-songsQuery];
[查询设置分组类型:MPMediaGroupingPlaylist];
[mediaTypeQuery addFilterPredicate:mediaTypePredicate];
NSArray*播放列表=[查询项];
这正是我需要的。我非常感谢你的帮助。