使用iOS中的MPMusicPlayerController播放和播放播放列表中的歌曲

时间:2013-01-10 14:09:04

标签: ios cocoa-touch mpmusicplayercontroller

我在NSArray中播放了播放列表歌曲,并显示我UITableView中的歌曲如下图所示。

enter image description here

就我而言,当我从UITableView中选择一首歌曲时,我想用MPMusicPlayerController's applicationMusicPlayer播放该歌曲。

我的意思是当我从UITableView选择美国白痴时,我想和MPMusicPlayerController's

一起玩美国白痴

当我点击“跳过”按钮时,必须播放下一首歌,就像郊区的耶稣一样。

以下是将歌曲加载到UITableView

的代码
self.player = [MPMusicPlayerController applicationMusicPlayer];

    MPMediaQuery *query = [MPMediaQuery playlistsQuery];
    MPMediaPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:@"GreenDay" forProperty:MPMediaPlaylistPropertyName comparisonType:MPMediaPredicateComparisonContains];

    [query addFilterPredicate:predicate];

    self.arrayOfSongs = [query items];

我想你明白我的意思。 当我从UITableView选择歌曲时,我想做所有音乐按钮的工作,如iOS内置音乐应用程序和播放歌曲。

我正在尝试任何,但我没有找到可以解决我的问题的解决方案。

请帮我这样做。

谢谢你。 :)

1 个答案:

答案 0 :(得分:2)

假设您的NSArray是使用MPMediaItemCollection中的MPMediaItems填充的,一旦您知道需要配置什么,这实际上非常简单。首先,创建一个iVar,最好是NSUInteger来存储当前播放曲目的索引。这是有必要按顺序从一个轨道转到另一个轨道。

其次,很难从你的帖子中看出,正在从集合中的媒体项目中读取曲目标题,或者它们是否只是静态放在桌面上,但我已经包含了如何阅读的示例数组中媒体项的曲目标题,并使用valueForProperty将该值设置为单元格文本。

最后,didSelectRowAtIndexPath在下面配置,以证明您已经创建的无符号整数到所选单元格的值。我创建的didSelectRowAtIndexPath和两个IBA都修改了这个索引的值,然后调用我创建的void“stopCurrentTrackAndPlaySelection”,它停止当前播放的轨道,将MPMediaItem强制转换为该索引处的对象,并且然后又开始玩了。

如果您需要更多说明,请询问:)

旁注:我建议您将媒体选择器选择(MPMediaItemCollection)的副本存储在NSMutableArray中,而不是直接存储在NSArray或MPMediaItemCollection中。这样您就可以动态添加或删除曲目而无需停止播放。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [myArrayOfTracks count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    [[cell textLabel] setText:[(MPMediaItem *)[myArrayOfTracks objectAtIndex:indexPath.row] valueForProperty:MPMediaItemPropertyTitle]];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    indexOfCurrentlyPlayingTrack = indexPath.row;
    [self stopCurrentTrackAndPlaySelection];
}

- (IBAction)nextTrack:(UIButton *)sender
{
    indexOfCurrentlyPlayingTrack ++;
    [self stopCurrentTrackAndPlaySelection];
}

- (IBAction)previousTrack:(UIButton *)sender
{
    indexOfCurrentlyPlayingTrack --;
    [self stopCurrentTrackAndPlaySelection];
}

- (void)stopCurrentTrackAndPlaySelection
{
    [myMPMusicPlayerController stop];
    [myMPMusicPlayerController setNowPlayingItem:(MPMediaItem *)[myArrayOfTracks objectAtIndex:indexOfCurrentlyPlayingTrack]];
    [myMPMusicPlayerController play];
}