2016-08-12 3 views
3

, даже если этот вопрос 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.

Вопросы, относящиеся:

+0

Это ужасно. Я думаю, что единственный способ решить проблему - рассказать об этом Apple. Вы отправили сообщение об ошибке? – evenodd

ответ

0

Поскольку музыка приложение обрабатывает фактическое воспроизведение деталей, то ваше собственное приложение не получает уведомления. Лучше всего подать запрос на повышение через bugreport.apple.com.

Команда Apple Music/iTunes выслушивает отзывы о том, как улучшить API Apple Music из того, что я могу сказать на WWDC.

+1

, кажется, нет никакого способа обойти это. Лучше всего подождать, пока они не принесут порядок этому запутанному API. Спасибо за ответ – driedel