如何在 MusicKit 中检测歌曲的结尾?

Mit*_*lly 5 audio-player mpmusicplayercontroller swift apple-music apple-musickit

我试图在我的应用程序中使用 Apple 的 Music Kit 来听音乐。我的问题是播放的第一首歌曲会不断重复。使用以下代码正确播放第一首歌曲:

let mediaArray = [songsApple?[songNumber!]] 
let playableColledction = MPMediaItemCollection.init(items: mediaArray as! [MPMediaItem]) 

applicationMusicPlayer.setQueue(with: playableCollection) 
applicationMusicPlayer.play() 
self.activateAudioSession 
Run Code Online (Sandbox Code Playgroud)

activateAudioSession 方法是:

 do {
   try audioSession.setCategory(AVAudioSessionCategoryPlayback) 
   try audioSession.setActive(true) 
 }
 catch let error {
   print(error.localizedDescription) 
 } 
Run Code Online (Sandbox Code Playgroud)

为了检测歌曲的结尾,我使用了 Apple Music 文档中的以下观察者:

applicationMusicPlayer.beginGeneratingPlaybackNotications() 

NotificationCenter.default.addObserver(self, #selector(didFinishSong), name: Notification.Name.MPMusicPlayerControllerNowPlayingItemDidChange, object: nil) 
Run Code Online (Sandbox Code Playgroud)

didFinishSong 方法用于从songsApple 数组中获取下一首要播放的歌曲的songNumber。然后将此信息传递回播放歌曲的方法以获取 mediaArray。但是,现在,当歌曲播放结束时,didFinishSong 不会被调用,而是从头开始重复播放。

我在检测歌曲结尾时做错了什么吗?还有另一种方法吗?我也尝试使用计时器,但由于某种原因,只要应用程序进入后台,计数就会不准确,它就会停止计数。

预先感谢您提供的任何帮助。如果您需要更多信息,请不要犹豫,我会澄清更多。