1

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

这种行为以前不存在,现在导致我的排队代码出现问题,该代码使用playbackState == .stopped.

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

在此更新之前,此行为很好。

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

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

我还应该提到我已经尝试过测试nowPlayingItem为零,但当前曲目没有被删除(也是问题的一部分,但我目前将它们视为相关)。

4

1 回答 1

0

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

于 2019-04-08T08:21:17.050 回答