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

  • 导入MediaPlayer.framework框架。
1 -(void)musicInit{
2     //创建播放器控制器
3     MPMediaPickerController *mpc = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];
4     //设置代理
5     mpc.delegate = self;
6     [self presentViewController:mpc animated:YES completion:nil];
7 }

  • 实现代理<MPMediaPickerControllerDelegate>,及其两个方法:
 1 #pragma mark - Delegate
 2 //选中后调用
 3 - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{
 4     NSArray *items = mediaItemCollection.items;
 5     MPMediaItem *item = [items objectAtIndex:0];
 6     NSString *name = [item valueForProperty:MPMediaItemPropertyTitle];
 7     NSLog(@"name= %@",name);
 8     MPMediaItemArtwork *artwork = [item valueForProperty:MPMediaItemPropertyArtwork];
 9     UIImage *image = [artwork imageWithSize:CGSizeMake(100, 100)];//获取图片
10     //  MPMediaItemPropertyPlaybackDuration     总时间的属性名称
11
12 //     MPMusicPlayerController *mpc = [MPMusicPlayerController iPodMusicPlayer];    //调用ipod播放器
13     MPMusicPlayerController *mpc = [MPMusicPlayerController applicationMusicPlayer];
14     //设置播放集合
15     [mpc setQueueWithItemCollection:mediaItemCollection];
16     [mpc play];
17
18     [self dismissViewControllerAnimated:YES completion:nil];
19 }
20 //点击取消时回调
21 - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{
22     [self dismissViewControllerAnimated:YES completion:nil];
23 }

二. 仅获取本地音乐的列表

  • 导入MediaPlayer.framework框架。
1 #import <UIKit/UIKit.h>
2 #import <MediaPlayer/MediaPlayer.h>
3
4 @interface MusicListTableViewController : UITableViewController
5
6 @property (nonatomic,retain) NSMutableArray *items;         //存放本地歌曲
7 @property (nonatomic,retain) MPMusicPlayerController *mpc;  //播放器对象
8
9 @end

 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4
 5     self.items = [NSMutableArray array];
 6     //监听歌曲播放完成的通知
 7     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reload) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:nil];
 8     [self initMusicItems];
 9 }
10
11 - (void)didReceiveMemoryWarning
12 {
13     [super didReceiveMemoryWarning];
14     // Dispose of any resources that can be recreated.
15 }
16
17 #pragma mark - Private Method
18 -(void)initMusicItems{
19     //获得query,用于请求本地歌曲集合
20     MPMediaQuery *query = [MPMediaQuery songsQuery];
21     //循环获取得到query获得的集合
22     for (MPMediaItemCollection *conllection in query.collections) {
23         //MPMediaItem为歌曲项,包含歌曲信息
24         for (MPMediaItem *item in conllection.items) {
25             [self.items addObject:item];
26         }
27     }
28     //通过歌曲items数组创建一个collection
29     MPMediaItemCollection *mic = [[MPMediaItemCollection alloc] initWithItems:self.items];
30     //获得应用播放器
31     self.mpc = [MPMusicPlayerController applicationMusicPlayer];
32     //开启播放通知,不开启,不会发送歌曲完成,音量改变的通知
33     [self.mpc beginGeneratingPlaybackNotifications];
34     //设置播放的集合
35     [self.mpc setQueueWithItemCollection:mic];
36 }
37
38 -(void)reload{
39     //音乐播放完成刷新table
40     [self.tableView reloadData];
41 }
42
43 #pragma mark - Table view data source
44
45
46 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
47 {
48     return self.items.count;
49 }
50
51 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
52 {
53     static NSString *CellIdentifier = @"MusicCellIdentifier";
54     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
55
56
57     MPMediaItem *item = self.items[indexPath.row];
58     //获得专辑对象
59     MPMediaItemArtwork *artwork = [item valueForProperty:MPMediaItemPropertyArtwork];
60     //专辑封面
61     UIImage *img = [artwork imageWithSize:CGSizeMake(100, 100)];
62     if (!img) {
63         img = [UIImage imageNamed:@"musicImage.png"];
64     }
65     cell.imageView.image = img;
66     cell.textLabel.text = [item valueForProperty:MPMediaItemPropertyTitle];         //歌曲名称
67     cell.detailTextLabel.text = [item valueForProperty:MPMediaItemPropertyArtist];  //歌手名称
68     if (self.mpc.nowPlayingItem == self.items[indexPath.row]) {
69         cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
70     }else{
71         cell.accessoryType = UITableViewCellAccessoryNone;
72     }
73
74
75     return cell;
76 }
77
78
79
80 #pragma mark - Table view delegate
81
82 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
83 {
84     [self.tableView deselectRowAtIndexPath:indexPath animated:NO];
85     //设置播放选中的歌曲
86     [self.mpc setNowPlayingItem:self.items[indexPath.row]];
87     [self.mpc play];
88
89     [self.tableView reloadData];
90 }

转载于:https://www.cnblogs.com/ubersexual/p/3285478.html

获取ios本地乐库音乐MPMediaPickerController相关推荐

  1. 安卓第三阶段实训项目:基于网络乐库音乐播放器V1.0

    目录 一.项目功能要求 二.涉及知识点 1.MVC模式 2.安卓核心组件 3.意图(Intent)

  2. 仿酷狗音乐播放器开发日志十四——右侧乐库的实现

    在使用酷狗播放器时,左侧功能块和右侧乐库功能是最常用的了,如果要下载音乐或者搜索自己喜欢的歌曲那就少不了右侧乐库.原版的乐库的截图如下     他拥有5个分类,分别是乐库.电台.MV.直播.歌词.从外 ...

  3. 利用 Python 一键下载网易云音乐 10W+ 乐库

    如果你常听音乐的话,肯定绕不开网易云,作为一款有情怀的音乐 App,我对网易云也是喜爱有加.虽然说现在都已经是 5G 时代了,大家的手机流量都绰绰有余,但在线播放还是不如本地存着音乐文件靠谱,今天我们 ...

  4. iOS架构-cocoapods之本地git库的管理(15)

    需求是:在工程中用cocoapods管理一个本地的一个抽离SDK库.和cocoapods管理远程的github的公开的库AFNetworking 一样管理自己的本地的一个库. 怎么实现:参看Cocoa ...

  5. 网易云与QQ音乐共享了99%乐库,那么这个工具解决剩下的百分之一--SDMUSIC(开源命令行音乐搜索下载软件)...

    4-17 修复qq音乐平台无法下载的BUG 4-15 修改了部分BUG,美化了结果输出.非常感谢raawaa. 新增(3-5) 批量下载UK榜,美国Billboard周榜,Beatport全球电子舞曲 ...

  6. 基于“新浪乐库”的音乐搜索API接口,返回JSON数据

    新浪开发平台提供的API接口非常丰富,可没有音乐搜索的接口,对于我们这些搞基于微博应用的孩子还是比较悲剧的. 于是我可爱的好基友@ACMer_耕畅写了一段代码,把"新浪乐库"返回的 ...

  7. iOS 常用第三方库及插件

    //菜单切换 https://github.com/pujiaxin33/JXCategoryView //各种导航栏样式 https://github.com/rickytan/RTRootNavi ...

  8. iOS常用第三方库大全,史上最全第三方库收集

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  9. IOS常用第三方库《转》

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

最新文章

  1. Java 修饰符的总结
  2. 数据分析之Pandas合并操作总结
  3. IOS中类和对象还有,nil/Nil/NULL的区别
  4. 于媛龄(201552118)第二次作业网调问卷的制作
  5. 区块链:这项颠覆性技术将如何改变未来
  6. u盘重置后计算机不显示了,u盘不显示盘符怎么办
  7. Makefile使用及多文件gdb 调试
  8. AS3图像抖动效果源码。
  9. SQLyog 安装过程
  10. Class 'QrCode' not found ? 和 laravel 生成二维码接口(Simple QrCod)
  11. 设计模式(1):工厂模式
  12. 怎么在Mac上格式化USB驱动器
  13. mysql nutch_Nutch2.1+mysql+solr3.6.1安装部署
  14. 读书笔记-人月神话8
  15. App上架Apple App Store和Google Play流程
  16. 常见非功能性需求的描述案例
  17. 微信html5线上卡券,16.7.1HTML5网页领取卡券
  18. 小米watch s2功能介绍 小米watch s2测评值得买吗
  19. HLS视频服务器SRS简介
  20. Nowcoder. 链表的回文结构

热门文章

  1. VB6学习——正则的使用
  2. 仿Mars MP3播放器项目1
  3. 区块链-浏览器-可视化
  4. 杭电刘春英老师写给计算机专业学生的一些忠告
  5. 面试:用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
  6. word转换pdf方法分享!word转换pdf软件合集。​
  7. java类型转换异常_解决java.lang.ClassCastException的java类型转换异常的问题
  8. CRT显示器原理简介
  9. Android Fragment跳转到Activity的方法
  10. c语言测试时间片大小,C语言模拟实现时间片轮转算法和优先级调度算法