播放音乐应用时未收到Android MEDIA_BUTTON事件

时间:2014-12-15 10:17:49

标签: android broadcastreceiver keyevent audio-player android-audiomanager android-music-player

我的应用应该抓住蓝牙耳机上的点击事件。它是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),我怎么才能收到媒体按钮事件?

谢谢!

1 个答案:

答案 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");
            }
    };

希望它对你有所帮助。