MPMusicPlayerController 在歌曲结束时报告播放状态为暂停,并且在歌曲排队后也报告播放状态为暂停,即使在显式调用 .Stop()
之后也是如此。 .
此行为之前不存在,现在导致我的排队代码出现问题,该代码使用对 playbackState == .stopped
的检查。 .
我已经为 MPMusicPlayerControllerPlaybackStateDidChange
设置了通知中心处理程序它调用一个函数来测试播放状态是否为 .stopped
这反过来调用委托(delegate)函数来提醒我的应用程序的其他方面(传输状态、从应用程序的队列中删除歌曲、对后续轨道进行排队等)歌曲已完成。
在此更新之前,此行为没有问题。
任何人都可以启发我解释更改的发行说明,或者提供有关如何正确检测歌曲结尾的指导吗?
我曾尝试将当前播放位置与歌曲的持续时间进行比较,但它们似乎从未对齐。当前播放位置似乎总是比持续时间短几秒钟。我试过比较 TimeIntervals(分辨率太高)以及使用格式化程序将它们转换为字符串并进行比较(看到时间在 UI 中正确报告)。
我还应该提到我已经尝试针对 nowPlayingItem
进行测试为零,但当前轨道未被删除(也是问题的一部分,但我目前将它们视为相关)。
最佳答案
我不确定为什么行为会发生变化,我在补丁说明中找不到任何内容。但是,您应该能够使用 setQueueWithItemCollection
对当前歌曲和下一首歌曲进行排队,并使用 MPMusicPlayerControllerNowPlayingItemDidChange
事件来更新队列,而不是一次设置一首歌曲。
关于iOS 12.2 MPMusicPlayerController 报告不正确的播放状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55568803/