Swift 3.0 中的 Spotify SDK:如何知道歌曲何时结束

Posted

技术标签:

【中文标题】Swift 3.0 中的 Spotify SDK:如何知道歌曲何时结束【英文标题】:Spotify SDK in Swift 3.0: how to know when a song ends 【发布时间】:2017-10-08 12:19:59 【问题描述】:

我正在使用 Spotify api 在 Swift 中构建一个个人应用程序,它需要做的一件事是在播放的歌曲结束后播放另一首歌曲。我有歌曲的 ID,所有歌曲都按照我想要的方式排序,我可以成功播放它们。

我只需要知道是否有办法判断一首歌曲何时结束,这样我就知道何时开始播放下一首歌曲或执行其他操作(每次歌曲因其他原因结束时我都会发出 HTTP 请求)。

您可以指出我的任何建议或任何资源都非常有帮助!无法通过谷歌搜索找到答案:(

Spotify API: Is there a way to determine when a song has finished playing?

这是一个类似的问题,但它是针对 javascript 的,但从未得到回答。

【问题讨论】:

【参考方案1】:

您可以实现SPTAudiostreamingPlaybackDelegate 协议,设置Spotify 播放器的playbackDelegate 属性并实现didStopPlayingTrack。示例类如下所示:

class MyClass: NSObject, SPTAudioStreamingPlaybackDelegate 
    var player = SPTAudioStreamingController.sharedInstance()


    func setup()          // Whatever function does the setup.
        player?.playbackDelegate = self
    

    func audioStreaming(_ audioStreaming: SPTAudioStreamingController!, didStopPlayingTrack trackUri: String!) 
        playNextSong()      // Or whatever else you wish to do here.
    

    func playNextSong() 
        // ...
    

(请注意,设置函数可以是任何东西——例如viewDidLoad,如果观察播放器的对象是视图控制器而不是子类化NSObject。)

因为didStopPlayingTrack 是一个delegate 函数,当它被调用时,Spotify SDK 应该进行管理(更具体地说,播放器应该在其委托对象上调用它)——你不需要自己调用它因为设置了玩家的委托。

【讨论】:

我对 Swift 有点陌生,所以我对声明的 audioStreaming 函数有点困惑。我们是否将 player 作为第一个参数传入(因为它是 SPTAudioStreamingController)?您能否详细说明如何使用此功能?我非常感谢:) 我更新了我的答案——如果还没有解决问题,请告诉我! 有效!太感谢了!当我阅读更多关于 swift 协议的内容时,这更有意义。你是救生员!

以上是关于Swift 3.0 中的 Spotify SDK:如何知道歌曲何时结束的主要内容,如果未能解决你的问题,请参考以下文章

Spotify iOS SDK Swift 显示所有 (!) 播放列表 (20+)

如何使用 Spotify SDK 和 Swift 3 正确处理令牌刷新。错误代码 = 3840

Spotify SDK Demo Swift 可以工作,但不能翻译为基于 Storyboard 的项目

无法播放歌曲 Spotify SDK

无法使用 Spotify iOS App Remote SDK 禁用自动播放

Quickblox + Swift 3.0 iOS SDK 错误:未找到应用程序和 QBConnectionZoneTypeProduction