iOS 讀取音樂(lè)/歌曲文件

參考文件:http://blog.csdn.net/ismilesky/article/details/50687505

需求:獲取本地歌曲文件
分析:本地歌曲文件也就是通多系統(tǒng)自帶的‘音樂(lè)’軟件下載的斤蔓,通過(guò)iTunes導(dǎo)入的排抬,以及通過(guò)第三方音樂(lè)軟件(比如:‘QQ音樂(lè)’栋猖,‘網(wǎng)易云音樂(lè)’等)下載的音樂(lè)。

  • "由于iPhone 自帶的音樂(lè)軟件Music的推出.從iPod取出來(lái)的音樂(lè)MPMediaItemPropertyAssetURL屬性可能為空.
    這是因?yàn)閕Phone自帶軟件Music對(duì)音樂(lè)版權(quán)的保護(hù),對(duì)于所有進(jìn)行過(guò) DRMProtection(數(shù)字版權(quán)加密保護(hù))的音樂(lè)都不能被第三方APP獲取并播放.即使這些音樂(lè)已經(jīng)下載到本地.但是還是可以播放本地未進(jìn)行過(guò)數(shù)字版權(quán)加密的音樂(lè).也就是您自己手動(dòng)導(dǎo)入的音樂(lè)锣吼。"

    從上面這段話可以看出,我們是沒(méi)辦法讀取通過(guò)iTunes下載的本地音樂(lè)的,而只能獲取通過(guò)iTunes手動(dòng)導(dǎo)入的音樂(lè)惯裕。
  • 由于沙盒保護(hù)機(jī)制,你無(wú)法訪問(wèn)其它App的沙盒路徑绣硝。
    所以無(wú)法獲取到第三方軟件中的文件蜻势。再者,音樂(lè)軟件之間基本上都屬于競(jìng)爭(zhēng)關(guān)系鹉胖,顯而~這個(gè)不用想了

實(shí)現(xiàn):這里是通過(guò)MediaPlayer.framework這個(gè)系統(tǒng)自帶的框架來(lái)實(shí)現(xiàn)的握玛。如果你有更好的實(shí)現(xiàn)方法,敬請(qǐng)留言哦~

  1. 需要在Info.plist文件中設(shè)置媒體庫(kù)權(quán)限:Privacy - Media Library Usage Description——請(qǐng)?jiān)试S訪問(wèn)
  2. 在需要實(shí)現(xiàn)該功能的相關(guān)類中導(dǎo)入
#import <AVFoundation/AVFoundation.h>    //獲取授權(quán)狀態(tài)需要導(dǎo)入
#import <MediaPlayer/MediaPlayer.h>        
  1. 根據(jù)授權(quán)狀態(tài)進(jìn)行不同的處理
    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if (status != AVAuthorizationStatusAuthorized&&status != AVAuthorizationStatusNotDetermined) {
        NSLog(@"提示用戶發(fā)開訪問(wèn)媒體庫(kù)的權(quán)限");
    }else{
        [self getLocalMusicItem];
    }
  1. 主代碼塊
    MPMediaQuery *_musicQuery = [MPMediaQuery songsQuery];      //獲取查詢隊(duì)列   注:這里獲取的是以歌曲名稱排序的查詢隊(duì)列
    
    //創(chuàng)建篩選條件
    _albumNamePredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeMusic] forProperty: MPMediaItemPropertyMediaType];
    [_musicQuery addFilterPredicate:_albumNamePredicate];
    //獲取對(duì)應(yīng)的集合  注:你可以注意一下items和collections和的區(qū)別甫菠,下面也會(huì)給出二者的區(qū)別
     _dataCollectionArr = _musicQuery.collections;      
    
    _dataArr = [NSMutableArray array];
    for (MPMediaItemCollection *songCollection in _dataCollectionArr) {
        MPMediaItem *songItem = songCollection.representativeItem;
        //NSString *songTitle = song.title;   等價(jià)于 NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
        [_dataArr addObject:songItem];
    }
    [_tbView reloadData];
  1. 一些簡(jiǎn)單的調(diào)用:
//獲取歌曲名    等價(jià)于 NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
songItem.title;     
//獲取專輯名       
 songItem.albumTitle;  
//獲取歌手名      
songItem.artist;      

 //獲取當(dāng)前條目對(duì)應(yīng)數(shù)組    根據(jù)上文挠铲,則獲取的是同一首歌對(duì)應(yīng)的數(shù)組        
MPMediaItemCollection *itemCollection = _dataCollectionArr[selIndex];
NSArray *subArray = itemCollection.items;;      

 //查詢        這里是通過(guò)查詢實(shí)現(xiàn)獲取當(dāng)前條目對(duì)應(yīng)數(shù)組,
 MPMediaItem *curSong = _dataArr[indexPath.row];
NSString *propertyStr = MPMediaItemPropertyArtistPersistentID;
NSString *keyIDStr = [curSong valueForProperty:propertyStr];
_albumNamePredicate =  [MPMediaPropertyPredicate predicateWithValue:keyIDStr   forProperty: propertyStr];
MPMediaQuery *query = [[MPMediaQuery alloc]init];
[query addFilterPredicate:_albumNamePredicate];
NSArray *itemsFromQuery = [query items];
SubViewController *subVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"SubViewController"];
subVC.dataArr = subArray;
[self.navigationController pushViewController:subVC animated:YES];      
  1. items和collections和的區(qū)別:通過(guò)查閱官方文檔可以看出淑蔚。items只是當(dāng)前條目市殷,collections是集合的集合,通過(guò)collections可以獲取到當(dāng)前條目對(duì)應(yīng)的集合刹衫。
// Returns an array of MPMediaItems matching the query filter predicates.
// If no items match this method returns an empty array, otherwise returns nil if an error prevents the items from being fetched.
@property (nonatomic, readonly, nullable) NSArray<MPMediaItem *> *items      

 // Returns an array of MPMediaItemCollections matching the query filter predicates. The collections are grouped by the groupingType.
@property (nonatomic, readonly, nullable) NSArray<MPMediaItemCollection *> *collections;
  1. 一個(gè)簡(jiǎn)單的Demo:AppleMusicDemo

建議:砍掉如此這般的功能??

期待你的評(píng)論建議O(∩_∩)O~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末醋寝,一起剝皮案震驚了整個(gè)濱河市搞挣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌音羞,老刑警劉巖囱桨,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嗅绰,居然都是意外死亡舍肠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門窘面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)翠语,“玉大人,你說(shuō)我怎么就攤上這事财边〖±ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵酣难,是天一觀的道長(zhǎng)谍夭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)憨募,這世上最難降的妖魔是什么紧索? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮菜谣,結(jié)果婚禮上珠漂,老公的妹妹穿的比我還像新娘。我一直安慰自己葛菇,他們只是感情好甘磨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布橡羞。 她就那樣靜靜地躺著眯停,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卿泽。 梳的紋絲不亂的頭發(fā)上莺债,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音签夭,去河邊找鬼齐邦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛第租,可吹牛的內(nèi)容都是我干的措拇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼慎宾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丐吓!你這毒婦竟也來(lái)了浅悉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤券犁,失蹤者是張志新(化名)和其女友劉穎术健,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粘衬,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荞估,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稚新。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勘伺。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖褂删,靈堂內(nèi)的尸體忽然破棺而出娇昙,到底是詐尸還是另有隱情,我是刑警寧澤笤妙,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布冒掌,位于F島的核電站,受9級(jí)特大地震影響蹲盘,放射性物質(zhì)發(fā)生泄漏股毫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一召衔、第九天 我趴在偏房一處隱蔽的房頂上張望铃诬。 院中可真熱鬧,春花似錦苍凛、人聲如沸趣席。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宣肚。三九已至,卻和暖如春悠栓,著一層夾襖步出監(jiān)牢的瞬間霉涨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工惭适, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笙瑟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓癞志,卻偏偏與公主長(zhǎng)得像往枷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容