获取ios本地乐库音乐MPMediaPickerController
一.通过弹出控制器,获取本地音乐列表,然后播放。该方法类似于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相关推荐
- 安卓第三阶段实训项目:基于网络乐库音乐播放器V1.0
目录 一.项目功能要求 二.涉及知识点 1.MVC模式 2.安卓核心组件 3.意图(Intent)
- 仿酷狗音乐播放器开发日志十四——右侧乐库的实现
在使用酷狗播放器时,左侧功能块和右侧乐库功能是最常用的了,如果要下载音乐或者搜索自己喜欢的歌曲那就少不了右侧乐库.原版的乐库的截图如下 他拥有5个分类,分别是乐库.电台.MV.直播.歌词.从外 ...
- 利用 Python 一键下载网易云音乐 10W+ 乐库
如果你常听音乐的话,肯定绕不开网易云,作为一款有情怀的音乐 App,我对网易云也是喜爱有加.虽然说现在都已经是 5G 时代了,大家的手机流量都绰绰有余,但在线播放还是不如本地存着音乐文件靠谱,今天我们 ...
- iOS架构-cocoapods之本地git库的管理(15)
需求是:在工程中用cocoapods管理一个本地的一个抽离SDK库.和cocoapods管理远程的github的公开的库AFNetworking 一样管理自己的本地的一个库. 怎么实现:参看Cocoa ...
- 网易云与QQ音乐共享了99%乐库,那么这个工具解决剩下的百分之一--SDMUSIC(开源命令行音乐搜索下载软件)...
4-17 修复qq音乐平台无法下载的BUG 4-15 修改了部分BUG,美化了结果输出.非常感谢raawaa. 新增(3-5) 批量下载UK榜,美国Billboard周榜,Beatport全球电子舞曲 ...
- 基于“新浪乐库”的音乐搜索API接口,返回JSON数据
新浪开发平台提供的API接口非常丰富,可没有音乐搜索的接口,对于我们这些搞基于微博应用的孩子还是比较悲剧的. 于是我可爱的好基友@ACMer_耕畅写了一段代码,把"新浪乐库"返回的 ...
- iOS 常用第三方库及插件
//菜单切换 https://github.com/pujiaxin33/JXCategoryView //各种导航栏样式 https://github.com/rickytan/RTRootNavi ...
- iOS常用第三方库大全,史上最全第三方库收集
下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...
- IOS常用第三方库《转》
UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...
最新文章
- Java 修饰符的总结
- 数据分析之Pandas合并操作总结
- IOS中类和对象还有,nil/Nil/NULL的区别
- 于媛龄(201552118)第二次作业网调问卷的制作
- 区块链:这项颠覆性技术将如何改变未来
- u盘重置后计算机不显示了,u盘不显示盘符怎么办
- Makefile使用及多文件gdb 调试
- AS3图像抖动效果源码。
- SQLyog 安装过程
- Class 'QrCode' not found ? 和 laravel 生成二维码接口(Simple QrCod)
- 设计模式(1):工厂模式
- 怎么在Mac上格式化USB驱动器
- mysql nutch_Nutch2.1+mysql+solr3.6.1安装部署
- 读书笔记-人月神话8
- App上架Apple App Store和Google Play流程
- 常见非功能性需求的描述案例
- 微信html5线上卡券,16.7.1HTML5网页领取卡券
- 小米watch s2功能介绍 小米watch s2测评值得买吗
- HLS视频服务器SRS简介
- Nowcoder. 链表的回文结构
热门文章
- VB6学习——正则的使用
- 仿Mars MP3播放器项目1
- 区块链-浏览器-可视化
- 杭电刘春英老师写给计算机专业学生的一些忠告
- 面试:用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
- word转换pdf方法分享!word转换pdf软件合集。​
- java类型转换异常_解决java.lang.ClassCastException的java类型转换异常的问题
- CRT显示器原理简介
- Android Fragment跳转到Activity的方法
- c语言测试时间片大小,C语言模拟实现时间片轮转算法和优先级调度算法