MPMusicPlayerController 不会与遥控器交互
MPMusicPlayerController won't interact with Remote Controls
尽管这个问题被问了很多次,但我没有找到满意的答案,我还是想再试一次:
我正在尝试用 MPMusicPlayerController
玩 MPMediaItems
。到目前为止,一切都很好。这是播放 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 曲目。
相关问题:
- beginReceivingRemoteControlEvents not triggering events for Apple Music
- MPMusicPlayerController breaks lock screen controls
由于音乐应用正在处理项目的实际播放,您自己的应用不会收到通知。最好的办法是通过 bugreport.apple.com 提交增强请求。
Apple Music / iTunes 团队正在听取有关如何改进 Apple Music API 的反馈,这些反馈来自我在 WWDC 上的反馈。
尽管这个问题被问了很多次,但我没有找到满意的答案,我还是想再试一次:
我正在尝试用 MPMusicPlayerController
玩 MPMediaItems
。到目前为止,一切都很好。这是播放 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 曲目。
相关问题:
- beginReceivingRemoteControlEvents not triggering events for Apple Music
- MPMusicPlayerController breaks lock screen controls
由于音乐应用正在处理项目的实际播放,您自己的应用不会收到通知。最好的办法是通过 bugreport.apple.com 提交增强请求。
Apple Music / iTunes 团队正在听取有关如何改进 Apple Music API 的反馈,这些反馈来自我在 WWDC 上的反馈。