iOS 12.2 MPMusicPlayerController报告错误的播放状态

时间:2019-04-08 08:05:46

标签: ios mpmusicplayercontroller notificationcenter swift5

MPMusicPlayerController会在歌曲到达结尾时将播放状态报告为暂停,并且即使在显式调用.Stop()之后,也在将歌曲排队后将播放状态报告为暂停。

此行为以前不存在,现在正导致我的排队代码出现问题,该代码使用对playbackState == .stopped的检查。

我为MPMusicPlayerControllerPlaybackStateDidChange设置了一个通知中心处理程序,该处理程序调用一个测试播放状态是否为.stopped的函数,该函数依次调用一个委托函数来提醒我的应用的其他方面(传输状态,从应用程序的队列中删除歌曲,对歌曲已完成的后续曲目进行排队等。

此行为在此更新之前就可以了。

有人能启发我讲解更改的发行说明,或提供有关如何正确检测歌曲结尾的指导吗?

我已经尝试将当前播放位置与歌曲的持续时间进行比较,但是它们似乎从未排成一行。当前播放位置似乎总是比持续时间短几秒钟。我尝试过比较TimeIntervals(分辨率太高)以及使用格式化程序将它们转换为字符串并进行比较(以查看时间在UI中正确报告)。

我还应该提到我曾经尝试过测试nowPlayingItem为零,但是当前音轨并没有删除(也是问题的一部分,但是我现在将它们视为相关)。

1 个答案:

答案 0 :(得分:0)

我不确定为什么行为已更改,我在补丁说明中找不到任何内容。但是,您应该能够使用setQueueWithItemCollection将当前歌曲和下一首歌曲排队,并使用MPMusicPlayerControllerNowPlayingItemDidChange事件来更新队列,而不是一次设置一首歌曲。