, даже если этот вопрос IST задавали много раз, и я не нашел никакого удовлетворительного ответа на этот вопрос, я все еще хочу дать ему еще одну попытку:MPMusicPlayerController не будет взаимодействовать с дистанционным управлением
Я пытаюсь играть MPMediaItems
с MPMusicPlayerController
. Все идет нормально. Это необходимо для воспроизведения файлов с Itunes Match или Apple Music. Любые другие файлы воспроизводятся через AVPlayer.
Handling пульты дистанционного управления для песен играл с 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
Это ужасно. Я думаю, что единственный способ решить проблему - рассказать об этом Apple. Вы отправили сообщение об ошибке? – evenodd