我的应用应该抓住蓝牙耳机上的点击事件。它是MEDIA_BUTTONS。 我使用广播接收器。通常它可以工作,但是当我在后台启动音乐应用程序时,音乐应用程序会窃取这些事件,我的onReceive方法永远不再被调用。
我的工作是: 1)我在清单中注册接收者:
<receiver android:name=".PlantronicsReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
2)我在活动中注册接收者
mAudioManager.registerMediaButtonEventReceiver(new ComponentName(this, PlantronicsReceiver.class));
您是否知道即使开放音乐应用(例如Google Play),我怎么才能收到媒体按钮事件?
谢谢!
答案 0 :(得分:2)
点击此链接:http://developer.android.com/training/managing-audio/audio-focus.html
首先,您需要获得音频焦点,然后才能捕获MEDIA_BUTTON事件。 我遇到了同样的问题,上面的内容对我有用。
关于我在评论中提到的意图行为的使用,您可以查看以下内容:
IntentFilter musicPauseFilter = new IntentFilter(
"android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION");
IntentFilter musicPlayFilter = new IntentFilter(
"android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION");
registerReceiver(musicPlay, musicPlayFilter);
registerReceiver(musicPause, musicPauseFilter);
然后你可以简单地定义这些接收器并在其中做任何需要的事情:
// Broadcast Receiver for Music play.
private BroadcastReceiver musicPlay = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.v("gaurav", "Music play started");
}
};
// Broadcast Receiver for Music pause.
private BroadcastReceiver musicPause = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.v("gaurav", "Music paused");
}
};
希望它对你有所帮助。