iOS實(shí)現(xiàn)獲取系統(tǒng)iTunes音樂的方法示例
播放音樂庫中的音樂
音樂是iOS的重要組成播放,無論是iPod、iTouch、iPhone還是iPad都可以在iTunes購買音樂或添加本地音樂到音樂庫中同步到你的iOS設(shè)備。 本文將給大家詳細(xì)介紹關(guān)于iOS獲取系統(tǒng)iTunes音樂的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
首先來看看效果圖
簡介
獲取類型iTune音樂非常類似于UIKit框架中UIImagePickerController圖片選取器的用法,既可以直接使用系統(tǒng)自帶的媒體選擇器也可以只獲取系統(tǒng)的數(shù)據(jù)加載到自定義界面中
與UIImagePickerController不同的是,MPMediaPickerController媒體選擇器是放在<MediaPlayer/MediaPlayer.h>
框架中的
MPMediaPickerController 簡介
MPMediaPickerController 與 UIImagePickerController 類似,允許用戶從音樂庫中選取音樂、播客、音頻書。
一、創(chuàng)建
MPMediaPickerController *mpc = [[MPMediaPickerControlleralloc]initWithMediaTypes:MPMediaTypeMusic]; mpc.delegate = self;//委托 mpc.prompt =@"Please select a music";//提示文字 mpc.allowsPickingMultipleItems=NO;//是否允許一次選擇多個(gè)
上述代碼創(chuàng)建了一個(gè) MPMediaPickerController 并設(shè)置了相關(guān)屬性。其中初始化的時(shí)候有一個(gè)參數(shù)是媒體類型,媒體類型可以是下面這些值:
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;
二、委托函數(shù)
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{ /*insert your code*/ for ( MPMediaItem* itemin [mediaItemCollection items]) { } [selfdismissModalViewControllerAnimated:YES]; [mediaPicker release]; }
在上面這個(gè)函數(shù)里你可以處理所選取的內(nèi)容。下面這個(gè)函數(shù)負(fù)責(zé)處理選中后取消的動(dòng)作:
-(void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{ /*insert your code*/ [selfdismissModalViewControllerAnimated:YES]; [mediaPicker release]; }
三、顯示
你可以在任何需要顯示的時(shí)候調(diào)用下面代碼:
[selfpresentModalViewController:mpc animated:YES];
使用系統(tǒng)自帶的控制器選擇iTunes歌曲
#pragma mark -使用系統(tǒng)自帶的控制器 - (void)presentiTunesMediaPickerController { //1.創(chuàng)建媒體選擇器 /**MPMediaType(大概有13種,這里只列出比較常用的幾種) MPMediaTypeMusic:音樂歌曲 MPMediaTypePodcast:博客(有聲雜志) MPMediaTypeAudioITunesU:iTuneU中的有聲讀物 MPMediaTypeMovie:電影 */ MPMediaPickerController *controller = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic]; //2.是否支持多選,默認(rèn)為no controller.allowsPickingMultipleItems = YES; //在導(dǎo)航欄的上方添加一個(gè)提示文本 controller.prompt = @"傳智播客-黑馬程序員"; //3.設(shè)置代理(代理比較簡單,只有兩個(gè)方法,完成選取和取消選取) 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) { //解析數(shù)據(jù) [self resolverMediaItem:song]; } //解除媒體選擇器器 [mediaPicker dismissViewControllerAnimated:YES completion:nil]; } //取消選取 - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker { //解除媒體選擇器器 [mediaPicker dismissViewControllerAnimated:YES completion:nil]; }
2、解析iTunes歌曲數(shù)據(jù)
#pragma mark -解析iTune音樂數(shù)據(jù) - (void)resolverMediaItem:(MPMediaItem *)song { //歌名 NSString *name = [song valueForProperty: MPMediaItemPropertyTitle]; //歌曲路徑 NSString *url = [song valueForProperty: MPMediaItemPropertyAssetURL]; //歌手名字 NSString *songer = [song valueForProperty: MPMediaItemPropertyArtist]; //歌曲時(shí)長(單位:秒) 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]; //從插圖中獲取圖像,參數(shù)size是圖像的大小 UIImage *image = [artwork imageWithSize:CGSizeMake(50, 50)]; self.label.text = [NSString stringWithFormat:@"歌名:%@ \n 歌曲路徑:%@ \n 歌手名字:%@ \n 歌曲時(shí)長%@ \n 歌曲插圖:%@",name,url,songer,time,image]; }
只獲取iTunes中的數(shù)據(jù),自定義界面
解析數(shù)組的操作與使用系統(tǒng)自帶控制器的方式一致
// 1.創(chuàng)建媒體選擇隊(duì)列(從ipod庫中讀出音樂文件) MPMediaQuery *everything = [[MPMediaQuery alloc] init]; // 2.創(chuàng)建讀取條件(類似于對(duì)數(shù)據(jù)做一個(gè)篩選) Value:作用等同于MPMediaType枚舉值 MPMediaPropertyPredicate *albumNamePredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType]; //3.給隊(duì)列添加讀取條件 [everything addFilterPredicate:albumNamePredicate]; //4.從隊(duì)列中獲取符合條件的數(shù)組集合 NSArray *itemsFromGenericQuery = [everything items]; //5.便利解析數(shù)據(jù) 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 -使用系統(tǒng)自帶的控制器 - (void)presentiTunesMediaPickerController { //1.創(chuàng)建媒體選擇器 /**MPMediaType(大概有13種,這里只列出比較常用的幾種) MPMediaTypeMusic:音樂歌曲 MPMediaTypePodcast:博客(有聲雜志) MPMediaTypeAudioITunesU:iTuneU中的有聲讀物 MPMediaTypeMovie:電影 */ MPMediaPickerController *controller = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic]; //2.是否支持多選,默認(rèn)為no controller.allowsPickingMultipleItems = YES; //在導(dǎo)航欄的上方添加一個(gè)提示文本 controller.prompt = @"傳智播客-黑馬程序員"; //3.設(shè)置代理(代理比較簡單,只有兩個(gè)方法,完成選取和取消選取) controller.delegate = self; //4.彈出媒體選擇器 [self presentViewController:controller animated:YES completion:nil]; } #pragma mark -只獲取iTunes中的數(shù)據(jù),界面自定義 - (void)getiTuneLibrary { // 1.創(chuàng)建媒體選擇隊(duì)列(從ipod庫中讀出音樂文件) MPMediaQuery *everything = [[MPMediaQuery alloc] init]; // 2.創(chuàng)建讀取條件(類似于對(duì)數(shù)據(jù)做一個(gè)篩選) Value:作用等同于MPMediaType枚舉值 MPMediaPropertyPredicate *albumNamePredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic ] forProperty: MPMediaItemPropertyMediaType]; //3.給隊(duì)列添加讀取條件 [everything addFilterPredicate:albumNamePredicate]; //4.從隊(duì)列中獲取符合條件的數(shù)組集合 NSArray *itemsFromGenericQuery = [everything items]; //5.便利解析數(shù)據(jù) for (MPMediaItem *song in itemsFromGenericQuery) { [self resolverMediaItem:song]; } } #pragma mark -解析iTune音樂數(shù)據(jù) - (void)resolverMediaItem:(MPMediaItem *)song { //歌名 NSString *name = [song valueForProperty: MPMediaItemPropertyTitle]; //歌曲路徑 NSString *url = [song valueForProperty: MPMediaItemPropertyAssetURL]; //歌手名字 NSString *songer = [song valueForProperty: MPMediaItemPropertyArtist]; //歌曲時(shí)長(單位:秒) 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]; //從插圖中獲取圖像,參數(shù)size是圖像的大小 UIImage *image = [artwork imageWithSize:CGSizeMake(50, 50)]; self.label.text = [NSString stringWithFormat:@"歌名:%@ \n 歌曲路徑:%@ \n 歌手名字:%@ \n 歌曲時(shí)長%@ \n 歌曲插圖:%@",name,url,songer,time,image]; } #pragma mark -MPMediaPickerControllerDelegate //完成選取 - (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { for (MPMediaItem *song in mediaItemCollection.items) { //解析數(shù)據(jù) [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
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- 講解iOS開發(fā)中對(duì)音效和音樂播放的簡單實(shí)現(xiàn)
- iOS App中實(shí)現(xiàn)播放音效和音樂功能的簡單示例
- 實(shí)例解析iOS中音樂播放器應(yīng)用開發(fā)的基本要點(diǎn)
- iOS開發(fā)中音頻工具類的封裝以及音樂播放器的細(xì)節(jié)控制
- iOS實(shí)現(xiàn)播放遠(yuǎn)程網(wǎng)絡(luò)音樂的核心技術(shù)點(diǎn)總結(jié)
- ios開發(fā):一個(gè)音樂播放器的設(shè)計(jì)與實(shí)現(xiàn)案例
- iOS利用AVPlayer播放網(wǎng)絡(luò)音樂的方法教程
- iOS中關(guān)于音樂鎖屏控制音樂(鎖屏信息設(shè)置)的實(shí)例代碼
- iOS視頻添加背景音樂同時(shí)保留原音
- 運(yùn)用iOS教你輕松制作音樂播放器
相關(guān)文章
OC runtime學(xué)習(xí)筆記之關(guān)聯(lián)對(duì)象
這篇文章主要介紹了OC runtime學(xué)習(xí)筆記之關(guān)聯(lián)對(duì)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09UIPageViewController實(shí)現(xiàn)的左右滑動(dòng)界面
這篇文章主要為大家詳細(xì)介紹了UIPageViewController實(shí)現(xiàn)的左右滑動(dòng)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06iOS 9 Core Spotlight搜索實(shí)例代碼
本文主要講解 iOS 9 Core Spotlight,在 IOS 開發(fā)的時(shí)候有時(shí)候會(huì)用到搜索功能,這里給大家一個(gè)實(shí)例作為參考,有需要的小伙伴可以參考下2016-07-07iOS App中數(shù)據(jù)管理框架Core Data的基本數(shù)據(jù)操作教程
Core Data框架能夠?yàn)槲覀兲峁┍炔僮鱏QL關(guān)系型數(shù)據(jù)庫更簡單的數(shù)據(jù)管理方式,而且內(nèi)置于Xcode中配合IDE操作十分方便,下面我們就來看一下iOS App中數(shù)據(jù)管理框架Core Data的基本數(shù)據(jù)操作教程2016-06-06iOS開發(fā)中使用SQL語句操作數(shù)據(jù)庫的基本用法指南
這篇文章主要介紹了iOS開發(fā)中使用SQL語句操作數(shù)據(jù)庫的基本用法指南,包括一些常用SQL語句的整理,需要的朋友可以參考下2015-12-12