MPMusicPlayerController 在歌曲到达结尾时将播放状态报告为暂停,并且在歌曲排队后也将播放状态报告为暂停,即使在显式调用.Stop()
.
这种行为以前不存在,现在导致我的排队代码出现问题,该代码使用playbackState == .stopped
.
我已经设置了一个通知中心处理程序,MPMusicPlayerControllerPlaybackStateDidChange
它调用一个函数来测试播放状态是否是.stopped
,该函数又调用一个委托函数来提醒我的应用程序的其他方面(传输状态,从应用程序的队列中删除歌曲,对后续曲目进行排队,等)这首歌已经完成。
在此更新之前,此行为很好。
任何人都可以启发我解释更改的发行说明,或提供有关如何正确检测歌曲结尾的指导吗?
我尝试将当前播放位置与歌曲的持续时间进行比较,但它们似乎从未对齐。当前播放位置似乎总是比持续时间短几秒钟。我尝试比较 TimeIntervals(分辨率太高)以及使用格式化程序将它们转换为字符串并进行比较(看到时间在 UI 中正确报告)。
我还应该提到我已经尝试过测试nowPlayingItem
为零,但当前曲目没有被删除(也是问题的一部分,但我目前将它们视为相关)。