获取ios本地乐库音乐MPMediaPickerController

本文介绍如何使用MPMediaPickerController和MPMusicPlayerController实现iOS设备上的本地音乐播放功能,包括选择音乐、播放控制及显示歌曲信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过弹出控制器,获取本地音乐列表,然后播放。该方法类似于UIImagePickerController。

 

  • 导入MediaPlayer.framework框架。
-(void)musicInit{
    //创建播放器控制器
    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];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值