短版
Spotify Android应用程序在最近的版本中引入了“设备广播状态”开关,我希望在我的应用程序中接收这些广播。有哪些广播可用,我应该如何配置我的BroadcastReceiver?
冗长的漫无边靠的版本
我正在将一个正在播放的功能集成到我的Android应用程序中,并让它与大多数主要音频媒体播放器合作。我想将它挂钩到Spotify中,这也是我主要用来播放音乐的内容。
我看到了其他一些关于实现此目的的Stack Overflow帖子(例如How is it possible to know what's spotify is playing from an external Android app?和Intercept / Get Data sent to Spotify Widget on Android),我还使用了adb shell dumpsys activity broadcasts命令来确定我认为这两个动作我感兴趣
com.spotify.mobile.android.playbackstatechanged
和com.spotify.mobile.android.metadatachanged
我在Spotify应用程序中使用了设备广播状态切换,我很高兴切换de /激活这些广播事件。
我遇到的问题是这些消息似乎只是偶尔发送的。当你可能期望它们(播放,暂停,下一个,前一个)时,我会收到playstatechanged事件,但它们不包含任何与当前曲目相关的信息。 metadatachanged事件很少发生,没有明显的模式。结合这使得很难(阅读,不可能)知道当前正在播放哪首曲目(如果有的话)。在一个好的会话中,事情可以持续数小时,每当新歌开始时会触发metadatachanged事件,在其他时候,我可能只会在整个会话期间获得一个事件。
我注意到可以通过开启/关闭WiFi来触发一系列事件,并且(可能)有趣的是,如果我听到已加星标的播放列表,那么我会得到更明智的结果。
其他一些帖子建议我应该能够使用标准Android操作com.android.music.playbackcomplete,com.android.music.playstatechanged和com.android.music.metachanged,但我的Spotify应用程序版本没有似乎触发了这些(我使用它们与标准媒体播放器集成)。
我知道这是Spotify应用程序中的一个新功能,但尚未记录,但有没有人在将此功能集成到他们的应用程序中有任何成功?如果是这样,您可以共享BroadcastReceiver的配置。或者,如果还有其他更好的方法,我也很乐意听到。
我使用的Spotify应用程序的版本是0.7.4.606。
答案 0 :(得分:1)
我使用Spotify 2.7.0.883获得了以下Intent Filter操作:
<!-- AndroidManifest.xml -->
...
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter>
<!-- Spotify -->
<action android:name="com.spotify.music.playbackstatechanged" />
<action android:name="com.spotify.music.metadatachanged" />
<action android:name="com.spotify.music.queuechanged" />
</intent-filter>
</receiver>
就捆绑的Intent附加内容而言,这个Spotify developer article很有用(但要注意这个帖子中的Intent Filter操作不正确)。
答案 1 :(得分:-2)
我意识到,Spotify不会为下载的曲目触发com.android.music.metachanged。 它只触发下载播放列表中的第一首曲目,而不会触发com.spotify.mobile.android.queuechanged,除了sentTime之外没有任何信息......
这是spotify中的错误吗?