当前播放状态的 Spotify Web SDK / Web API 问题

Posted

技术标签:

【中文标题】当前播放状态的 Spotify Web SDK / Web API 问题【英文标题】:Spotify Web SDK / Web API Issues with state of current playback 【发布时间】:2020-05-12 11:59:14 【问题描述】:

我目前正在使用 Web Player SDK / Web Api 来控制我的应用程序中的 Spotify 播放。我目前遇到的问题是,每当我播放歌曲时,我都无法检测到歌曲播放的结束,因为

state.track_window.next_songs

在收听时

player.addListener('player_state_changed', state => );

“播放队列”中总是有项目,这导致检测几乎不可能。

这个: state && state.paused && state.context && state.context.metadata && state.context.metadata.uri == null 通常适用,但如果 state.track_window.next_songs 包含任何内容,则永远不会触发暂停。

我想知道是否有人对此有解决方案,或者是否有办法清除特定 Spotify 播放器实例的播放队列?

谢谢!

【问题讨论】:

【参考方案1】:

我不确定我的理解是否正确,但是如果您想检测歌曲何时播放完毕,您可以拥有一个名为 currentPlaying 的对象,其中包含当前播放歌曲的 ID,然后当有状态更新时,请检查state.current_track 的 ID。如果它与您的 currentPlaying.id 不同,则表示歌曲已播放完毕,下一首已开始。

----- 编辑 ------

有一种方法可以让 next_tracks 数组为空。如果您使用"uris" body 参数播放歌曲,您可以添加要播放的歌曲数组,最后 next_tracks 数组为空。看这个截图:

要实现这一点,请查看 Spotify API: https://developer.spotify.com/console/put-play/?device_id=&body=%7B%20uris%3A%20%5Bspotify%3Atrack%3A3BQHpFgAp4l80e1XslIjNI%5D%20%7D

我只使用"uris" 参数而不是"context_uri",并且我只在数组中传递了一首歌曲。歌曲播放完之后就没有播放了。

【讨论】:

这可能适用于简单的应用程序,但如果我有一个特定的曲目我想在完成之后播放呢?我不会有新的 currentPlaying 因为轨道停止了。

以上是关于当前播放状态的 Spotify Web SDK / Web API 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spotify Web API 获取当前播放/最近播放的歌曲

Spotify Web Playback SDK - 播放完整歌曲

Spotify 网络播放 SDK 集成

播放单轨Spotify SDK

Spotify 网络播放 SDK

Spotify iOS SDK - 无后台播放