这篇文章将为大家详细讲解有关怎么在iOS中获取系统iTunes音乐,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
一、创建
MPMediaPickerController *mpc = [[MPMediaPickerControlleralloc]initWithMediaTypes:MPMediaTypeMusic]; mpc.delegate = self;//委托 mpc.prompt =@"Please select a music";//提示文字 mpc.allowsPickingMultipleItems=NO;//是否允许一次选择多个
上述代码创建了一个 MPMediaPickerController 并设置了相关属性。其中初始化的时候有一个参数是媒体类型,媒体类型可以是下面这些值:
enum { // audio MPMediaTypeMusic = 1 << 0, MPMediaTypePodcast = 1 << 1, MPMediaTypeAudioBook = 1 << 2, MPMediaTypeAudioITunesU = 1 << 3, // available in iOS 5.0 MPMediaTypeAnyAudio = 0x00ff, // video (available in iOS 5.0) MPMediaTypeMovie = 1 << 8, MPMediaTypeTVShow = 1 << 9, MPMediaTypeVideoPodcast = 1 << 10, MPMediaTypeMusicVideo = 1 << 11, MPMediaTypeVideoITunesU = 1 << 12, MPMediaTypeAnyVideo = 0xff00, MPMediaTypeAny = ~0 }; typedef NSInteger MPMediaType;
二、委托函数
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{ /*insert your code*/ for ( MPMediaItem* itemin [mediaItemCollection items]) { } [selfdismissModalViewControllerAnimated:YES]; [mediaPicker release]; }
在上面这个函数里你可以处理所选取的内容。下面这个函数负责处理选中后取消的动作:
-(void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{ /*insert your code*/ [selfdismissModalViewControllerAnimated:YES]; [mediaPicker release]; }
三、显示
你可以在任何需要显示的时候调用下面代码:
[selfpresentModalViewController:mpc animated:YES];
使用系统自带的控制器选择iTunes歌曲
#pragma mark -使用系统自带的控制器 - (void)presentiTunesMediaPickerController { //1.创建媒体选择器 /**MPMediaType(大概有13种,这里只列出比较常用的几种) MPMediaTypeMusic:音乐歌曲 MPMediaTypePodcast:博客(有声杂志) MPMediaTypeAudioITunesU:iTuneU中的有声读物 MPMediaTypeMovie:电影 */ MPMediaPickerController *controller = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic]; //2.是否支持多选,默认为no controller.allowsPickingMultipleItems = YES; //在导航栏的上方添加一个提示文本 controller.prompt = @"传智播客-黑马程序员"; //3.设置代理(代理比较简单,只有两个方法,完成选取和取消选取) controller.delegate = self; //4.弹出媒体选择器 [self presentViewController:controller animated:YES completion:nil]; }
1、MPMediaPickerControllerDelegate代理
#pragma mark -MPMediaPickerControllerDelegate //完成选取 - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { for (MPMediaItem *song in mediaItemCollection.items) { //解析数据 [self resolverMediaItem:song]; } //解除媒体选择器器 [mediaPicker dismissViewControllerAnimated:YES completion:nil]; } //取消选取 - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker { //解除媒体选择器器 [mediaPicker dismissViewControllerAnimated:YES completion:nil]; }
2、解析iTunes歌曲数据
#pragma mark -解析iTune音乐数据 - (void)resolverMediaItem:(MPMediaItem *)song { //歌名 NSString *name = [song valueForProperty: MPMediaItemPropertyTitle]; //歌曲路径 NSString *url = [song valueForProperty: MPMediaItemPropertyAssetURL]; //歌手名字 NSString *songer = [song valueForProperty: MPMediaItemPropertyArtist]; //歌曲时长(单位:秒) NSTimeInterval INW = [[song valueForProperty: MPMediaItemPropertyPlaybackDuration] doubleValue]; NSString *time; if((int)INW%60<10) { time = [NSString stringWithFormat:@"%d:0%d",(int)INW/60,(int)INW%60]; } else { time = [NSString stringWithFormat:@"%d:%d",(int)INW/60,(int)INW%60]; } if(songer == nil) { songer = @"未知歌手"; } //歌曲插图(如果没有插图,则返回nil) MPMediaItemArtwork *artwork = [song valueForProperty: MPMediaItemPropertyArtwork]; //从插图中获取图像,参数size是图像的大小 UIImage *image = [artwork imageWithSize:CGSizeMake(50, 50)]; self.label.text = [NSString stringWithFormat:@"歌名:%@ \n 歌曲路径:%@ \n 歌手名字:%@ \n 歌曲时长%@ \n 歌曲插图:%@",name,url,songer,time,image]; }
只获取iTunes中的数据,自定义界面
解析数组的操作与使用系统自带控制器的方式一致
// 1.创建媒体选择队列(从ipod库中读出音乐文件) MPMediaQuery *everything = [[MPMediaQuery alloc] init]; // 2.创建读取条件(类似于对数据做一个筛选) Value:作用等同于MPMediaType枚举值 MPMediaPropertyPredicate *albumNamePredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType]; //3.给队列添加读取条件 [everything addFilterPredicate:albumNamePredicate]; //4.从队列中获取符合条件的数组集合 NSArray *itemsFromGenericQuery = [everything items]; //5.便利解析数据 for (MPMediaItem *song in itemsFromGenericQuery) { [self resolverMediaItem:song]; }
完整代码
#import "ViewController.h" #import <MediaPlayer/MediaPlayer.h> #import <CoreFoundation/CoreFoundation.h> @interface ViewController ()<MPMediaPickerControllerDelegate> @property (weak, nonatomic) IBOutlet UILabel *label; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self presentiTunesMediaPickerController]; } #pragma mark -使用系统自带的控制器 - (void)presentiTunesMediaPickerController { //1.创建媒体选择器 /**MPMediaType(大概有13种,这里只列出比较常用的几种) MPMediaTypeMusic:音乐歌曲 MPMediaTypePodcast:博客(有声杂志) MPMediaTypeAudioITunesU:iTuneU中的有声读物 MPMediaTypeMovie:电影 */ MPMediaPickerController *controller = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic]; //2.是否支持多选,默认为no controller.allowsPickingMultipleItems = YES; //在导航栏的上方添加一个提示文本 controller.prompt = @"传智播客-黑马程序员"; //3.设置代理(代理比较简单,只有两个方法,完成选取和取消选取) controller.delegate = self; //4.弹出媒体选择器 [self presentViewController:controller animated:YES completion:nil]; } #pragma mark -只获取iTunes中的数据,界面自定义 - (void)getiTuneLibrary { // 1.创建媒体选择队列(从ipod库中读出音乐文件) MPMediaQuery *everything = [[MPMediaQuery alloc] init]; // 2.创建读取条件(类似于对数据做一个筛选) Value:作用等同于MPMediaType枚举值 MPMediaPropertyPredicate *albumNamePredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType]; //3.给队列添加读取条件 [everything addFilterPredicate:albumNamePredicate]; //4.从队列中获取符合条件的数组集合 NSArray *itemsFromGenericQuery = [everything items]; //5.便利解析数据 for (MPMediaItem *song in itemsFromGenericQuery) { [self resolverMediaItem:song]; } } #pragma mark -解析iTune音乐数据 - (void)resolverMediaItem:(MPMediaItem *)song { //歌名 NSString *name = [song valueForProperty: MPMediaItemPropertyTitle]; //歌曲路径 NSString *url = [song valueForProperty: MPMediaItemPropertyAssetURL]; //歌手名字 NSString *songer = [song valueForProperty: MPMediaItemPropertyArtist]; //歌曲时长(单位:秒) NSTimeInterval INW = [[song valueForProperty: MPMediaItemPropertyPlaybackDuration] doubleValue]; NSString *time; if((int)INW%60<10) { time = [NSString stringWithFormat:@"%d:0%d",(int)INW/60,(int)INW%60]; } else { time = [NSString stringWithFormat:@"%d:%d",(int)INW/60,(int)INW%60]; } if(songer == nil) { songer = @"未知歌手"; } //歌曲插图(如果没有插图,则返回nil) MPMediaItemArtwork *artwork = [song valueForProperty: MPMediaItemPropertyArtwork]; //从插图中获取图像,参数size是图像的大小 UIImage *image = [artwork imageWithSize:CGSizeMake(50, 50)]; self.label.text = [NSString stringWithFormat:@"歌名:%@ \n 歌曲路径:%@ \n 歌手名字:%@ \n 歌曲时长%@ \n 歌曲插图:%@",name,url,songer,time,image]; } #pragma mark -MPMediaPickerControllerDelegate //完成选取 - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { for (MPMediaItem *song in mediaItemCollection.items) { //解析数据 [self resolverMediaItem:song]; } //解除媒体选择器器 [mediaPicker dismissViewControllerAnimated:YES completion:nil]; } //取消选取 - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker { //解除媒体选择器器 [mediaPicker dismissViewControllerAnimated:YES completion:nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
关于怎么在iOS中获取系统iTunes音乐就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。