通过弹出控制器,获取本地音乐列表,然后播放。该方法类似于UIImagePickerController。
- 导入MediaPlayer.framework框架。
//创建播放器控制器
MPMediaPickerController *mpc = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];
//设置代理
mpc.delegate = self;
[self presentViewController:mpc animated:YES completion:nil];
}
实现代理<MPMediaPickerControllerDelegate>,及其两个方法:
#pragma mark - Delegate
//选中后调用
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{
NSArray *items = mediaItemCollection.items;
MPMediaItem *item = [items objectAtIndex:0];
NSString *name = [item valueForProperty:MPMediaItemPropertyTitle];
NSLog(@"name= %@",name);
MPMediaItemArtwork *artwork = [item valueForProperty:MPMediaItemPropertyArtwork];
UIImage *image = [artwork imageWithSize:CGSizeMake(100, 100)];//获取图片
// MPMediaItemPropertyPlaybackDuration 总时间的属性名称
// MPMusicPlayerController *mpc = [MPMusicPlayerController iPodMusicPlayer]; //调用ipod播放器
MPMusicPlayerController *mpc = [MPMusicPlayerController applicationMusicPlayer];
//设置播放集合
[mpc setQueueWithItemCollection:mediaItemCollection];
[mpc play];
[self dismissViewControllerAnimated:YES completion:nil];
}
//点击取消时回调
- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{
[self dismissViewControllerAnimated:YES completion:nil];
}
仅获取本地音乐的列表
导入MediaPlayer.framework框架。#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
@interface MusicListTableViewController : UITableViewController
@property (nonatomic,retain) NSMutableArray *items; //存放本地歌曲
@property (nonatomic,retain) MPMusicPlayerController *mpc; //播放器对象
@end
- (void)viewDidLoad
{
[super viewDidLoad];
self.items = [NSMutableArray array];
//监听歌曲播放完成的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reload) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:nil];
[self initMusicItems];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Private Method
-(void)initMusicItems{
//获得query,用于请求本地歌曲集合
MPMediaQuery *query = [MPMediaQuery songsQuery];
//循环获取得到query获得的集合
for (MPMediaItemCollection *conllection in query.collections) {
//MPMediaItem为歌曲项,包含歌曲信息
for (MPMediaItem *item in conllection.items) {
[self.items addObject:item];
}
}
//通过歌曲items数组创建一个collection
MPMediaItemCollection *mic = [[MPMediaItemCollection alloc] initWithItems:self.items];
//获得应用播放器
self.mpc = [MPMusicPlayerController applicationMusicPlayer];
//开启播放通知,不开启,不会发送歌曲完成,音量改变的通知
[self.mpc beginGeneratingPlaybackNotifications];
//设置播放的集合
[self.mpc setQueueWithItemCollection:mic];
}
-(void)reload{
//音乐播放完成刷新table
[self.tableView reloadData];
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MusicCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
MPMediaItem *item = self.items[indexPath.row];
//获得专辑对象
MPMediaItemArtwork *artwork = [item valueForProperty:MPMediaItemPropertyArtwork];
//专辑封面
UIImage *img = [artwork imageWithSize:CGSizeMake(100, 100)];
if (!img) {
img = [UIImage imageNamed:@"musicImage.png"];
}
cell.imageView.image = img;
cell.textLabel.text = [item valueForProperty:MPMediaItemPropertyTitle]; //歌曲名称
cell.detailTextLabel.text = [item valueForProperty:MPMediaItemPropertyArtist]; //歌手名称
if (self.mpc.nowPlayingItem == self.items[indexPath.row]) {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}else{
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
//设置播放选中的歌曲
[self.mpc setNowPlayingItem:self.items[indexPath.row]];
[self.mpc play];
[self.tableView reloadData];
}