2015-10-09 3 views
0

Я пишу музыкальное приложение, которое выполняет задачу между каждой песней. Мне нужно сделать это, даже когда приложение находится в фоновом режиме, поэтому мне нужно знать, когда песня завершилась. На данный момент я использую AVPlayer, который отправляет уведомления, даже когда приложение находится в фоновом режиме, но не может воспроизводить песни из iCloud пользователя. MPMediaPlayerController может воспроизводить песни iCloud, но не отправляет уведомления, когда приложение находится в фоновом режиме (что очень важно для моего приложения).iOS AVPlayer v. MPMusicPlayerController

Итак, кто-нибудь знает либо

  1. Есть умные способы, имеющие AVPlayer игры ICloud песни или
  2. Имея мое приложение распознавать, когда песня игры через MPMusicPlayerController завершена, когда приложение работает в фоновом режиме?
+0

Вы когда-нибудь решали это для своего приложения? – newenglander

ответ

2

Вы пробовали использовать NSNotification Center и один из этих двух наблюдателей? MPMusicPlayerControllerPlaybackStateDidChangeNotification или MPMusicPlayerControllerNowPlayingItemDidChangeNotification.

Кроме того, вы должны использовать beginGeneratingPlaybackNotifications() на вашем экземпляре MPMusicPlayerController.applicationMusicPlayer() или MPMusicPlayerController.systemMusicPlayer()

1

Чтобы построить на @ ответ Ким. Вы можете использовать NSNotificationCenter и добавить ObserverEvents. Я использую класс MPMusicPlayerController для своего приложения, и я зарегистрировал приложение для использования свойств NSNotificationCenter, чтобы я мог вызывать определенные методы во время различных событий.

Например, при использовании свойства SystemMusicPlayer, если вы выходите и завершаете процесс приложения, музыка продолжает воспроизводиться. Если пользователь хочет, чтобы остановить музыку, когда они exityou могли бы назвать это:

-(void) registerMediaPlayerNotifications { 
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

    [notificationCenter addObserver:self 
          selector:@selector(stopMusicWhenApplicationQuits) 
           name:UIApplicationWillTerminateNotification 
          object:[UIApplication sharedApplication]]; 
    [musicPlayer beginGeneratingPlaybackNotifications]; 
} 

Где вы видите @selector, что это метод, который будет срабатывать, когда приложение получает события. Который в musicPlayer вы можете сказать

[self.musicPlayer stop]; 

Так вопрос у вас есть, вы все еще можете использовать MediaPlayer рамки, используйте MPMusicPlayerController класс и вызвать различные методы на различных этапах во время выполнения приложения, используя NSNotificationCenter свойства.

Надеюсь, что это поможет, сообщите мне, если у вас возникнут дополнительные вопросы.