【问题标题】:How to play a song from the itunes library in iphone如何在 iphone 中播放 iTunes 库中的歌曲
【发布时间】:2009-11-03 03:45:28
【问题描述】:

您好,我需要播放 iTunes 库中的歌曲。我浏览了 Apples ipod Library Access Guide 并获得了代码。

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];

但这将从库列表的最开始播放。当我从列表中选择一首歌时,我需要播放它。谁能帮帮我...

谢谢, 世斌。

【问题讨论】:

    标签: iphone ipod


    【解决方案1】:

    使用MPMediaPickerController 实例,您可以从 iPod 库的歌曲列表、专辑列表等中进行选择。这是一个从 iPod 中选择所有歌曲并显示在模式视图控制器中的示例。

    - (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]; 
    }
    

    现在您需要实现委托以将歌曲存储到您的本地变量中。这里,selectedSongCollectionMPMediaItemCollection 的一个实例。

    - (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection 
    {
        [self dismissModalViewControllerAnimated: YES];
        selectedSongCollection=mediaItemCollection; 
    }
    

    完成歌曲选择后,执行委托以关闭选择器:

    - (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker 
    {   
        [self dismissModalViewControllerAnimated: YES]; 
    }
    

    【讨论】:

    • @crazyoxygen:正如我在答案中已经提到的, selectedSongCollection 是 MPMediaItemCollection 的一个实例。
    • 我可以将它与本地通知声音结合起来吗??
    【解决方案2】:

    您正在将所有歌曲的播放列表分配给音乐播放器,因此它当然会从头开始播放整个列表。如果您希望用户从 iPod 库中选择特定歌曲,请使用 MPMediaPickerController

    【讨论】:

      【解决方案3】:

      我无法在我的场景中使用MPMediaPickerController

      我对问题的简短回答是看看[musicplayer setNowPlayingItem:item]

      下面是我的实现中的一些代码。

      // 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];
      }
      

      PLAYER/DATAENV 是我的单身人士

      #define PLAYER  [[AudioController sharedAudioController_instance] musicPlayer]
      #define DATAENV [DataEnvironment sharedDataEnvironment_instance]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 1970-01-01
        相关资源
        最近更新 更多