2015-10-09 37 views
0

我正在寫一個音樂播放應用程序,它在每首歌曲之間執行任務。即使應用程序處於後臺,我也需要這樣做,所以我需要知道一首歌曲何時完成。目前,我正在使用AVPlayer,即使應用程序處於後臺但不能播放用戶的iCloud中的歌曲時,它也會發送通知。 MPMediaPlayerController可以播放iCloud歌曲,但不會在應用程序處於後臺時發送通知(這對我的應用程序至關重要)。iOS AVPlayer v。MPMusicPlayerController

因此,沒有人知道或者

  1. AVPlayer播放iCloud中的歌曲,或
  2. 有當通過MPMusicPlayerController播放歌曲已經完成時,應用程序在後臺我的應用程序識別的任何聰明的方式?
+0

你有沒有爲你的應用程序解決這個問題? – newenglander

回答

2

您是否嘗試過使用NSNotification Center和這兩個觀察者之一? MPMusicPlayerControllerPlaybackStateDidChangeNotificationMPMusicPlayerControllerNowPlayingItemDidChangeNotification

此外,您還需要使用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性能通話過程中不同的應用程序運行階段的各種方法。

希望這可以幫助,讓我知道如果你有任何進一步的問題。