【发布时间】:2015-04-14 19:09:45
【问题描述】:
我想在应用处于后台时接收来自音乐播放器的广播。
我找到了以下代码here:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter iF = new IntentFilter();
iF.addAction("com.android.music.metachanged");
iF.addAction("com.android.music.playstatechanged");
iF.addAction("com.android.music.playbackcomplete");
iF.addAction("com.android.music.queuechanged");
registerReceiver(mReceiver, iF);
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
String cmd = intent.getStringExtra("command");
Log.v("tag ", action + " / " + cmd);
String artist = intent.getStringExtra("artist");
String album = intent.getStringExtra("album");
String track = intent.getStringExtra("track");
Log.v("tag", artist + ":" + album + ":" + track);
Toast.makeText(CurrentMusicTrackInfoActivity.this, track, Toast.LENGTH_SHORT).show();
}
};
它有效,但仅在活动运行时。所以我尝试制作一个静态广播接收器:
<receiver
android:name=".receiver.MusicBroadcastReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.android.music.metachanged" />
<action android:name="com.android.music.playstatechanged" />
<action android:name="com.android.music.playbackcomplete" />
<action android:name="com.android.music.queuechanged" />
</intent-filter>
</receiver>
班级:
public class MusicBroadcastReceiver extends BroadcastReceiver {
public MusicBroadcastReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
String cmd = intent.getStringExtra("command");
Log.v("tag ", action + " / " + cmd);
String artist = intent.getStringExtra("artist");
String album = intent.getStringExtra("album");
String track = intent.getStringExtra("track");
Log.v("tag", artist + ":" + album + ":" + track);
Toast.makeText(context, track, Toast.LENGTH_SHORT).show();
}
}
而且它不起作用。 我开始搜索,发现this question,它声称上面的代码应该可以工作。但事实并非如此,当我开始播放音乐或跳过曲目时,不会调用 onReceive。我一定是做错了什么,但我不知道是什么。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
快速提问,使用您当前的代码,如果您打开应用程序,转到后台并更改音乐,onRecieve 是否有效?
-
您可以尝试使用 android:name 属性的完整路径名
-
哪一个?我没有尝试过动态的,因为我认为它会在活动被破坏的那一刻被破坏。静态的不行。我尝试使用完整路径,但没有任何区别。