Como jogar uma música da biblioteca do iTunes no iPhone
Pergunta
Oi eu preciso tocar uma música da biblioteca do iTunes. Eu tinha ido através das Maçãs ipod Biblioteca Guia de Acesso e tem o código.
MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSLog(@"Logging items from a generic query...");
NSArray *itemsFromGenericQuery = [everything items];
MPMediaItem *song;
for (song in itemsFromGenericQuery)
{
NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
NSLog (@"%@", songTitle);
}
//assign a playback queue containing all media items on the device
[myPlayer setQueueWithQuery:everything];//setQueueWithQuery:everything];
//start playing from the begining
[myPlayer play];
Mas isso vai começar a jogar desde o início da lista da biblioteca. Eu preciso tocar uma música quando eu selecioná-lo da lista. Alguém pode ajudar-me por favor ...
Obrigado, Shibin.
Solução
Usando o exemplo MPMediaPickerController
você pode escolher entre lista de músicas da biblioteca do iPod, lista de álbuns, etc .. Aqui está um exemplo que seleciona todas as músicas do iPod e exibe em um controlador de vista modal.
- (IBAction) selectSong: (id) sender
{
MPMediaPickerController *picker =
[[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];
picker.delegate = self;
picker.allowsPickingMultipleItems = NO;
picker.prompt = NSLocalizedString (@"Select any song from the list", @"Prompt to user to choose some songs to play");
[self presentModalViewController: picker animated: YES];
[picker release];
}
Agora você precisa implementar o delegado para armazenar a música em sua variável local. Aqui, selectedSongCollection
é uma instância de MPMediaItemCollection
.
- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection
{
[self dismissModalViewControllerAnimated: YES];
selectedSongCollection=mediaItemCollection;
}
Depois de terminar com a seleção da canção, implementar o delegado para demitir o seleccionador:
- (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker
{
[self dismissModalViewControllerAnimated: YES];
}
Outras dicas
Você está atribuindo uma lista de reprodução de todas as músicas para o leitor de música, então é claro que vai jogar a lista inteira, a partir do início. Se você deseja que o usuário para selecionar uma música específica da biblioteca iPod, o uso MPMediaPickerController
.
Eu não poderia usar theMPMediaPickerController
no meu cenário.
A minha resposta curta a questão é ter um olhar para [musicplayer setNowPlayingItem:item]
aqui está um código abaixo do meu implementação.
// Create a new query
MPMediaQuery *query = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *mpp = [MPMediaPropertyPredicate predicateWithValue:@"a" forProperty:MPMediaItemPropertyTitle comparisonType:MPMediaPredicateComparisonContains];
[query addFilterPredicate:mpp];
// Retrieve the results and reload the table data
DATAENV.songCollections = [NSMutableArray arrayWithArray:query.collections];
//populate cell rows with
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MPMediaItem *item = [[[DATAENV.songCollections objectAtIndex:indexPath.row] items] lastObject];
titleLbl = [item valueForProperty:MPMediaItemPropertyTitle];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MPMediaItem *item = [[[self.songCollections objectAtIndex:indexPath.row] items] lastObject];
[PLAYER setNowPlayingItem:item];
[PLAYER play];
}
Onde PLAYER / DATAENV são meus singletons
#define PLAYER [[AudioController sharedAudioController_instance] musicPlayer]
#define DATAENV [DataEnvironment sharedDataEnvironment_instance]