以编程方式从iPhone应用程序访问设备音乐文件

我想要访问iPhone上可用的音乐文件并将其列出(或)将文件导入到我的iPhone应用程序中,并开始播放。 可以做到吗? 类似于我们如何使用UIImagePickerController委托方法从设备相册访问图像。

谢谢!

您可以引用MPMediaPickerController class 。 它的function与UIImagePickerController类相同。

 -(void)loadDeviceMusic{ MPMediaQuery *everything = [[MPMediaQuery alloc] init]; [everything addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithBool:NO] forProperty:MPMediaItemPropertyIsCloudItem]]; NSArray *itemsFromGenericQuery = [everything items]; for (MPMediaItem *song in itemsFromGenericQuery) { NSURL *assetURL = [song valueForProperty:MPMediaItemPropertyAssetURL]; AVAsset *asset = [AVAsset assetWithURL:assetURL]; NSLog(@"SONGS URL=%@",assetURL); if ([asset hasProtectedContent] == NO) { MP3ObjectsClass *objMp3=[[MP3ObjectsClass alloc] init]; objMp3.mp3Url=[song valueForProperty:MPMediaItemPropertyAssetURL]; objMp3.mp3Duration=[song valueForProperty: MPMediaItemPropertyPlaybackDuration]; if([song valueForProperty: MPMediaItemPropertyTitle]){ objMp3.mp3Name=[song valueForProperty: MPMediaItemPropertyTitle]; }else{ objMp3.mp3Name=@"Unknown"; } if([song valueForProperty: MPMediaItemPropertyArtist]){ objMp3.mp3ArtistName=[song valueForProperty: MPMediaItemPropertyArtist]; }else{ objMp3.mp3ArtistName=@"Unknown"; } if([song valueForProperty: MPMediaItemPropertyAlbumTitle]){ objMp3.mp3AlbumTitle=[song valueForProperty: MPMediaItemPropertyAlbumTitle]; }else{ objMp3.mp3AlbumTitle=@"Unknown"; } UIImage *mp3Image=[self getAlbumnArtWorkImage:assetURL]; if(mp3Image){ objMp3.mp3Image=mp3Image; }else{ objMp3.mp3Image=[UIImage imageNamed:@"DefaultImage"]; } [mp3Array addObject:objMp3]; } } } -(UIImage *)getAlbumnArtWorkImage :(NSURL *)mp3Url{ AVAsset *asset = [AVURLAsset URLAssetWithURL:mp3Url options:nil]; UIImage *img = nil; for (NSString *format in [asset availableMetadataFormats]) { for (AVMetadataItem *item in [asset metadataForFormat:format]) { if ([[item commonKey] isEqualToString:@"artwork"]) { img = [UIImage imageWithData:[item.value copyWithZone:nil]]; } } } return img; } 

*** MP3ObjectsClass是一个NSObject类。 使用上述function,您可以从iPhone访问设备音乐文件。

首先导入AVFoundation / AVFoundation.h框架。

 #import <AVFoundation/AVFoundation.h> -(void)pickAudioFiles { MPMediaPickerController *soundPicker=[[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio]; soundPicker.delegate=self; soundPicker.allowsPickingMultipleItems=NO; [self presentViewController:soundPicker animated:YES completion:nil]; } -(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { MPMediaItem *item = [[mediaItemCollection items] objectAtIndex:0]; NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL]; [mediaPicker dismissViewControllerAnimated:YES completion:nil]; AVPlayerItem *playerItem=[AVPlayerItem playerItemWithURL:url]; AVPlayer *player=[[AVPlayer alloc] initWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer=[AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame=CGRectMake(0, 0, 10, 10); [self.view.layer addSublayer:playerLayer]; } 

并玩[player play];

如果你想使用AVAudioPlayer然后导入AudioToolbox/AudioToolbox.h