是否可以连接到 Spotify 的 MediaBrowserService?

Posted

技术标签:

【中文标题】是否可以连接到 Spotify 的 MediaBrowserService?【英文标题】:Is it possible to connect to Spotify's MediaBrowserService? 【发布时间】:2020-05-29 15:27:29 【问题描述】:

我正在编写语音助手,并希望能够在 Spotify 中启动搜索结果。为了了解如何连接到 Spotify 和其他应用程序,我正在使用Google's Media Controller Test app,它被描述为执行以下操作:

创建一个连接到 MediaBrowserService 的简单 MediaController 为了测试应用间媒体控件。

此应用适用于通用 android 音乐播放器示例,或任何 其他实现媒体 API 的应用。

当我运行该应用程序时,它将 Spotify 识别为提供 MediaBrowserService,但当我尝试通过该应用程序连接到 Spotify 时出现错误:

这是connection code:

mBrowser = new MediaBrowserCompat(this, mMediaAppDetails.componentName,
        new MediaBrowserCompat.ConnectionCallback() 
             @Override
             public void onConnected() 
                 setupMediaController();
                 mBrowseMediaItemsAdapter.setRoot(mBrowser.getRoot());
             

             @Override
             public void onConnectionSuspended() 
                 //TODO(rasekh): shut down browser.
                 mBrowseMediaItemsAdapter.setRoot(null);
             

             @Override
             public void onConnectionFailed() 
                 showToastAndFinish(getString(
                         R.string.connection_failed_msg, mMediaAppDetails.appName));
             

         , null);
mBrowser.connect();

具体来说,在调用mBrowser.connect() 后不久,回调的onConnectionFailed() 方法被调用。

这是否意味着 Spotify 拒绝来自未列入白名单的应用程序的 MediaBrowserService 请求(如 here 所述),并且单个应用程序编写者无法连接到 Spotify 的 MediaBrowserService,或者有其他方法可以连接? FWIW,Google Play 音乐也拒绝通过该应用进行连接。

我也有tried getting Spotify to search and play by launching an intent,但没有成功。

【问题讨论】:

MediaBrowserService 与 Spotify 无关,“媒体控制器测试”示例预计将连接到 Universal Android Music Player Sample。见MusicService.kt; Spotify 需要公开类似的 Intent 服务。 @MartinZeitler 感谢您的回复。根据“媒体控制器测试”的自述文件,它显示“使用 'android.media.browse.MediaBrowserService' 的意图过滤器操作注册服务的应用程序”。 Spotify 显示在应用程序的列表中,如我添加的屏幕截图所示。我也尝试过使用意图,如更新的问题中所述。 可能是显而易见的,但是,这不是您应该开始阅读的地方吗? developer.spotify.com/documentation/android 谢谢@Simson。我知道 SDK,但我希望有一个适用于多个音乐播放器的通用解决方案。 @EllenSpertus 我不知道 Spotify 的 MediaBrowserService 实现中可能存在白名单,因此最初的声明部分不准确。 【参考方案1】:

这是否意味着 Spotify 拒绝来自未列入白名单的应用的 MediaBrowserService 请求(如此处所述),并且单个应用编写者无法连接到 Spotify 的 MediaBrowserService,还是有其他连接方式?

是的,这正是onConnectionFailed 的意思。

您可以通过将 UAMP 的 onGetRoot 更改为返回 null 而不是 BrowserRoot(UAMP_EMPTY_ROOT, rootExtras) 来验证这一点。

一般来说,如果您想使用标准 Android API 和MediaBrowserCompat,您需要联系每个音乐播放器并要求他们将您的应用列入白名单(或切换到允许所有应用控制其播放)连接到他们。

【讨论】:

谢谢。你会考虑看看我最近的其他问题吗?【参考方案2】:

除非您的应用程序是使用 Android Build 密钥签名的系统应用程序,否则您无法使用 MediaBrowserService 连接到 Spotify。我不能 100% 确定即使这样也能解决问题。

但是,您不需要 MediaBrowserService 来查询 Spotify。我建议你试试 Spotify Android SDK:https://developer.spotify.com/documentation/android/

【讨论】:

谢谢。我尝试自签名证书并将其用于应用程序,但行为没有改变。这是你的建议还是别的什么? 您需要一个只有设备制造商拥有的平台密钥。因此,我建议您尝试使用 Spotify SDK 来实现您想要的。

以上是关于是否可以连接到 Spotify 的 MediaBrowserService?的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到 spotify kafka 容器,基本连接问题

我无法从 Spotify 为我的应用检索访问令牌

如何使用 Spotify API 和 Spotify SDK [关闭]

在 dockerized 环境中无法从 Flask 连接到 Kafka

显示我在 Spotify 上收听的内容

带有 React 的 Spotify 隐式授权流程 - 用户登录