MPMusicPlayerController不会与遥控器进行交互

时间:2016-08-12 13:00:12

标签: ios iphone audio mpmusicplayercontroller

即使这个问题被多次询问而且我没有找到任何令人满意的答案,我仍然想再试一次:

我尝试使用MPMediaItemsMPMusicPlayerController。到现在为止还挺好。这是播放来自Itunes Match或Apple Music的文件所必需的。通过AVPlayer播放任何其他文件。

使用AVPlayer播放歌曲的远程控制似乎没问题:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];

- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent

此外,可以在后台检索AVPlayerItemDidPlayToEndTimeNotification对此做出反应,以开始播放下一首歌曲。

尝试使用MPMusicPlayerController播放一首歌的所有内容似乎无法正常工作。我试着播放这样一首歌:

 self.audioPlayer = [MPMusicPlayerController applicationMusicPlayer];
 self.audioPlayer.repeatMode = MPMusicRepeatModeNone;
 [self.audioPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:@[_playerItem]]];

使用给定的观察者:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(playbackStateDidChange:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(playbackItemDidChange:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:nil];
[self.audioPlayer beginGeneratingPlaybackNotifications];

如果应用程序位于前台,则会按原样调用观察者。进入背景后,观察者不再被召唤。在这种情况下,我无法检测到歌曲的结尾以跳到下一首歌曲。

此外 - 遥控器无法正常工作。我用过:

[MPRemoteCommandCenter sharedCommandCenter].playCommand.enabled = YES;
[[MPRemoteCommandCenter sharedCommandCenter].playCommand addTarget:self action:@selector(remotePlay)];

[MPRemoteCommandCenter sharedCommandCenter].pauseCommand.enabled = YES;
[[MPRemoteCommandCenter sharedCommandCenter].pauseCommand addTarget:self action:@selector(remoteStop)];

[MPRemoteCommandCenter sharedCommandCenter].previousTrackCommand.enabled = YES;
[[MPRemoteCommandCenter sharedCommandCenter].previousTrackCommand addTarget:self action:@selector(loadPreviousSong)];

[MPRemoteCommandCenter sharedCommandCenter].nextTrackCommand.enabled = YES;
[[MPRemoteCommandCenter sharedCommandCenter].nextTrackCommand addTarget:self action:@selector(loadNextSong)];

但是在前景和背景中都会调用这些给定的选择器。

有没有人能解决我的问题?如上所述我需要使用MPMusicPlayerController,因为我想播放Apple Music和iTunes Match曲目。

相关问题:

1 个答案:

答案 0 :(得分:1)

由于音乐应用正在处理项目的实际播放,因此您自己的应用不会收到通知。您最好的办法是通过bugreport.apple.com提交增强请求。

Apple Music / iTunes团队正在听取有关如何改进Apple Music API的反馈,而不是我在WWDC上所知道的。