iOS中 UIMPMediaPickerController播放系统音乐

简介:

布局如下:



引入框架:

#import <AVFoundation/AVFoundation.h>

#import <MediaPlayer/MediaPlayer.h>

遵循协议及引入头文件

[objc]  view plain  copy
  1. #import "ViewController.h"  
  2. #import <AVFoundation/AVFoundation.h>  
  3. #import <MediaPlayer/MediaPlayer.h>  
  4.   
  5. @interface ViewController ()<MPMediaPickerControllerDelegate>  
  6.   
  7. @end  
  8.   
  9. @implementation ViewController  
点击事件:

[objc]  view plain  copy
  1. - (IBAction)pickMusicAction:(UIButton *)sender {  
  2.       
  3.     //创建一个MPMediaPickerController 并为其指定媒体类型  
  4.     //媒体类型:包括音乐,音频等  
  5.     //MPMediaTypeMovie  
  6.     //MPMediaTypeMusic  
  7.     MPMediaPickerController *mediaPC = [[MPMediaPickerController alloc]initWithMediaTypes:(MPMediaTypeMusic)];  
  8.       
  9.     if (mediaPC != nil) {  
  10.         NSLog(@"Successfully instantiated a media picker");  
  11.           
  12.         // 设置相关的属性  
  13.         // 代理  
  14.         mediaPC.delegate = self;  
  15.         // 提示文字  
  16.         mediaPC.prompt = @"请选择要播放的音乐";  
  17.         // 是否允许一次选择多个  
  18.         mediaPC.allowsPickingMultipleItems = YES;  
  19.           
  20.         [self presentViewController:mediaPC animated:YES completion:nil];  
  21.     
  22.     }else{  
  23.         NSLog(@"Could not instantiate a media picker");  
  24.     }  
  25.       
  26.       
  27. }  

// 通过代理方法来获取选中的歌曲

// MPMediaItemCollection  多媒体项集合

// MPMediaItem 单个多媒体项,如一首歌曲

// collection是一组有序的item集合

[objc]  view plain  copy
  1. - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection  
  2. {  
  3.     NSLog(@"%@",mediaItemCollection);  
  4.       
  5.     //MPMusicPlayerController类可以播放音乐库中的音乐  
  6.     //MPMusicPlayerController提供两种播放器类型,一种是applicationMusicPlayer,一种是iPodMusicPlayer,这里用iPodMusicPlayer。前者在应用退出后音乐播放会自动停止,后者在应用停止后不会退出播放状态。  
  7.     MPMusicPlayerController *musicPC = [[MPMusicPlayerController alloc]init];  
  8.       
  9.     //MPMusicPlayerController加载音乐不同于前面的AVAudioPlayer,AVAudioPlayer是通过一个文件路径来加载,而MPMusicPlayerController需要一个播放队列,正是由于它的播放音频来源是一个队列,因此MPMusicPlayerController支持上一曲、下一曲等操作。  
  10.       
  11.     [musicPC setQueueWithItemCollection:mediaItemCollection];  
  12.     [musicPC play];  
  13.      
  14. }  

[objc]  view plain  copy
  1. //选中后取消动作  
  2. - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker  
  3. {  
  4.     NSLog(@"Media Picker was cancelled");  
  5.       
  6.     [mediaPicker dismissViewControllerAnimated:YES completion:nil];  
  7.       
  8. }  

最终效果:

每日更新关注:http://weibo.com/hanjunqiang  新浪微博

原文地址:http://blog.csdn.net/qq_31810357/article/details/50008255


相关文章
|
17天前
|
开发工具 Swift 数据安全/隐私保护
移动应用开发之旅:从零到一的iOS系统探索
【9月更文挑战第16天】在数字时代的浪潮中,移动应用成为连接用户与数字世界的桥梁。本文将带你走进iOS移动操作系统的世界,了解其架构、设计理念以及开发环境。我们将通过Swift语言的简单示例,展示如何构建一个基本的iOS应用,并探讨移动应用开发的未来趋势。无论你是编程新手还是资深开发者,这篇文章都将为你提供宝贵的见解和知识。
|
10天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
2月前
|
存储 安全 编译器
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
|
2月前
|
人工智能 自然语言处理 云计算
iOS迎来AI升级:揭秘Apple全新“智能”系统
iOS迎来AI升级:揭秘Apple全新“智能”系统
iOS迎来AI升级:揭秘Apple全新“智能”系统
|
2月前
|
编解码 Linux 开发工具
iOS平台如何实现RTSP|RTMP播放端录像?
我们在做RTSP、RTMP直播播放器的时候,有个比较重要的功能,就是拉流端实时录像,包括设置单个录像文件大小、文件前缀、audio转AAC、只录制视频或只录制音频、开始录像、停止录像事件状态回调等。
|
2月前
|
iOS开发 开发者
iOS 16 系统键盘修复问题之汇编层面模拟两次返回操作的实现如何解决
iOS 16 系统键盘修复问题之汇编层面模拟两次返回操作的实现如何解决
|
2月前
|
存储 iOS开发
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类对_lock的加锁和解锁操作如何解决
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类对_lock的加锁和解锁操作如何解决
|
2月前
|
安全 Android开发 iOS开发
安卓与iOS的终极对决:哪个系统更适合你?
在智能手机的世界里,安卓和iOS两大操作系统如同两座巍峨的山峰,各自拥有庞大的用户群体。本文将深入浅出地探讨这两个系统的优缺点,并帮助你找到最适合自己的那一款。让我们一起揭开这场技术盛宴的序幕吧!
|
2月前
|
编译器 C语言 iOS开发
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
|
2月前
|
存储 安全 iOS开发
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类中对_lock的使用是否正确如何解决
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类中对_lock的使用是否正确如何解决