MPMusicPlayerController 在使用谓词后不会自动跳到下一个项目

Posted

技术标签:

【中文标题】MPMusicPlayerController 在使用谓词后不会自动跳到下一个项目【英文标题】:MPMusicPlayerController doesn't skip to the next item automatically after using a predicate 【发布时间】:2013-06-02 18:05:43 【问题描述】:

我正在开发一个音乐播放器应用程序。我有一个包含 ipod 库的歌曲名称的 tableView。我的问题是,当我选择一个单元格时,它会播放一首特定的歌曲,但是当该歌曲完成时它不会自动跳到下一个项目。 这是我选择单元格时的代码:

MPMediaQuery *mq  = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *songNamePredicate = [MPMediaPropertyPredicate               
predicateWithValue:[songsTitle objectAtIndex:indexPath.row]     
forProperty:MPMediaItemPropertyTitle];
[mq addFilterPredicate:songNamePredicate];
[mp setQueueWithQuery:mq];
[mp play]; 

我真的需要你的帮助。谢谢。

【问题讨论】:

【参考方案1】:

它不会跳到下一首歌曲,因为播放队列只有一个项目。在启动时,将播放队列设置为整个歌曲查询。还使用MPMediaQueryitems 属性创建一个MPMediaItems 数组:

MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
self.songs = songsQuery.items;
[self.musicPlayer setQueueWithQuery:songsQuery];

tableView:didSelectRowAtIndexPath: 中,让音乐播放器使用MPMusicPlayerControllersetNowPlayingItem: 方法播放所选项目:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    MPMediaItem *song = self.songs[indexPath.row];
    [self.musicPlayer setNowPlayingItem:song];
    [self.musicPlayer play];

下面是一个示例项目,它演示了这一点: https://dl.dropboxusercontent.com/u/1990969/SongsPlayerTableView.zip

【讨论】:

非常感谢您回答我。我会试试看 :)

以上是关于MPMusicPlayerController 在使用谓词后不会自动跳到下一个项目的主要内容,如果未能解决你的问题,请参考以下文章

MPMusicPlayerController 音量衰减

播客在哪里使用 MPMusicPlayerController 停止了?

AudioUnits 和 MPMusicPlayerController

MPMusicPlayerController 停止不起作用

为啥在 MPMusicPlayerController 中设置队列仅在集合中添加第一首曲目?

MPMusicPlayerController.systemMusicPlayer setQueue 困难