3

这个问题听起来很简单,但我找不到检查轨道 uri 是否正确的方法。

例如,通过给定的有效曲目 uri spotify:track:5Z7ygHQo02SUrFmcgpwsKW播放曲目的正常过程是:

1) 通过 sp_link_create_from_string(const char *$track_uri) 获取 sp_link*

2) 通过 sp_link_as_track(sp_link*) 获取 sp_track*

3) sp_track_add_ref(sp_track*)

4) 如果 sp_track_error() 返回 SP_ERROR_OK 或 SP_ERROR_IS_LOADING 但 metadata_updated 和 SP_ERROR_OK 则 sp_session_player_load 和 sp_session_player_play 加载和播放曲目。

5) sp_track_release() 和 sp_session_player_unload() 当它是轨道结束时。

现在,如果用户在 spotify track uri 上打错字并尝试播放spotify:track:5Z7ygHQo02SUrFmcgpwsKQ(最后一个字符Q是错字,应该是W)。过程中所有可能的错误检查都不会返回任何错误:

步骤 1) sp_link 不为 NULL

步骤 2) sp_track* 不为 NULL

步骤 3) 返回 SP_ERROR_OK

步骤 4) sp_track_error() 返回 SP_ERROR_IS_LOADING,metadata_updated 永远不会被调用,当然程序会挂起。

加载轨道之前的检查无法找出轨道 uri 的无效性。API sp_track_availability听起来像是一种方式,但是如果没有加载轨道,它总是会返回 NOT AVAILABLE,但如果轨道 uri 不正确,则永远不会加载轨道。

我是否遗漏了什么或误解了 API?

4

2 回答 2

2

您可以通过检查以下链接类型来检查 uri 是否有效:

enum    sp_linktype { 
  SP_LINKTYPE_INVALID = 0, 
  SP_LINKTYPE_TRACK = 1, 
  SP_LINKTYPE_ALBUM = 2, 
  SP_LINKTYPE_ARTIST = 3, 
  SP_LINKTYPE_SEARCH = 4, 
  SP_LINKTYPE_PLAYLIST = 5, 
  SP_LINKTYPE_PROFILE = 6, 
  SP_LINKTYPE_STARRED = 7, 
  SP_LINKTYPE_LOCALTRACK = 8, 
  SP_LINKTYPE_IMAGE = 9 
}

这使我们有可能像这样执行链接检查:

  1. 检查 sp_link_type(link) == SP_LINKTYPE_TRACK
  2. 从 sp_link_as_track(link) 或 sp_track_get_playable(sp_link*, sp_session*) 创建 sp_track* 轨道
  3. 等待它被加载,然后检查可用性
于 2012-08-26T22:44:13.650 回答
0

将曲目uri spotify:track:5Z7ygHQo02SUrFmcgpwsKW复制到浏览器地址栏,回车,会自动切换到spotify应用并定位到该专辑。

于 2012-11-23T16:27:22.803 回答