我有 Spotify,想在我的应用程序中使用标题和歌曲名称。(最终目标是将它导出到我的 Liveview 手表,这样我就可以用它来控制 Spotify)
由于有一个 Spotify 小部件,我只想添加一个广播接收器来获取发送到小部件的数据。
所以我添加了一个广播接收器,据我了解这个概念,这应该足够了,然后我应该能够获取 Spotify 发送到小部件的数据。
根据文档,您可以使用广播接收器完成所有可以使用小部件管理器执行的操作,所以我认为广播接收器很好。
一旦调用 on_receive,我就创建了一个调试日志条目和一个 Toast,所以至少应该有一些东西。
从错误消息中我知道,如果您没有小部件,Spotify 总是会尝试将数据发送给它,所以我很确定,错误在我这边。
我的代码如下:
(为简洁起见,稍后将作为服务或其他东西缩短)文本视图稍后将显示标题
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// für den Song
IntentFilter iF = new IntentFilter();
iF.addCategory("ComponentInfo");
iF.addCategory("com.spotify.mobile.android.service.SpotifyIntentService");
iF.addCategory("com.spotify.mobile.android.service.SpotifyService");
iF.addAction("com.spotify.mobile.android.ui.widget.SpotifyWidget");
iF.addAction("ComponentInfo");
iF.addAction("com.spotify");
iF.addAction("com.spotify.mobile.android.service.SpotifyIntentService");
iF.addAction("com.spotify.mobile.android.service.SpotifyService");
iF.addAction("com.android.music.metachanged");
iF.addAction("com.android.music.playstatechanged");
iF.addAction("com.android.music.playbackcomplete");
iF.addAction("com.android.music.queuechanged");
iF.addAction("com.spotify.mobile.android.ui");
registerReceiver(mReceiver, iF);
// albumtext = (TextView) findViewById(R.id.albumText);
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("onReceive launched", "kekse");
String action = intent.getAction();
String cmd = intent.getStringExtra("command");
String com = intent.getStringExtra("ComponentInfo");
Log.d("mIntentReceiver.onReceive ", action + " / " + cmd+ " / "+ com);
String artist = intent.getStringExtra("artist");
String album = intent.getStringExtra("album");
String track = intent.getStringExtra("track");
Log.d("Music",artist+":"+album+":"+track);
Toast.makeText(context, "Command : "+cmd+"\n Artist : "+artist+" Album :"+album+"Track : "+track+" " , Toast.LENGTH_SHORT).show();
}
};
为了完整起见,这是我的清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.KarlheinzMeier.SpotifyController"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="de.KarlheinzMeier.SpotifyControllerActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.ComponentInfo" />
</intent-filter>
<receiver android:name="com.spotify.mobile.android.ui.widget.SpotifyWidget" android:label="Kekse">
<intent-filter>
<action android:name="com.spotify.mobile.android.service.SpotifyService" />
<action android:name="com.spotify.mobile.android.service.SpotifyIntentService" />
</intent-filter>
</receiver>
</activity>
</application>
</manifest>
PS:我知道一旦内部数据格式发生变化,我的App就会崩溃,因为它仅供私人使用,我不介意,所以请不要讨论。如果有API,我会接受它,因为没有...