【问题标题】:iOS 12.2 MPMusicPlayerController reporting incorrect playback stateiOS 12.2 MPMusicPlayerController 报告不正确的播放状态
【发布时间】:2019-08-29 07:55:03
【问题描述】:

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

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

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

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

谁能告诉我解释更改的发行说明,或提供有关如何正确检测歌曲结尾的指导?

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

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

【问题讨论】:

    标签: ios mpmusicplayercontroller notificationcenter swift5


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我手动管理队列,这样当一首歌曲播放完毕时,它不会自动开始播放下一首歌曲。由于您所说的原因,我已经在听 NowPlayingItemDidChange 了,但它也没有被解雇。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多