我的应用程序会播放音乐,我希望能够暂停/播放/跳过任何可能支持这些按钮(汽车,耳机等)的蓝牙设备。当通过汽车的蓝牙连接时,音频会自动进入,但控制按钮不会影响我应用的音频流。它改为打开默认的媒体播放器。如何路由这些按钮以影响我的应用程序?
答案 0 :(得分:17)
您是否在应用中注册BroadcastReceiver
以使用AudioManager.registerMediaButtonEventReceiver()
收听MEDIA_BUTTON
个活动?
注册后,可以通过将附加项中附加的KeyEvent
对象处理为EXTRA_KEY_EVENT
来处理按钮事件。例如:
@Override
public void onReceive(Context context, Intent intent) {
final KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event.getAction() != KeyEvent.ACTION_DOWN) return;
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_MEDIA_STOP:
// stop music
break;
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
// pause music
break;
case KeyEvent.KEYCODE_MEDIA_NEXT:
// next track
break;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
// previous track
break;
}
}
这个Android Developer blog post也有一些很好的信息。
答案 1 :(得分:5)
继accepted answer之后,请注意冰淇淋三明治中的一个密码已发生变化:
播放/暂停意图传递的键码已更改 ICS。看到这个 http://code.google.com/p/media-button-router/issues/detail?id=10#c5
在ICS之前发送的密码是 KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE。现在有两个单独的密钥代码 用于播放和暂停(126和127)。
发送KEYCODE_MEDIA_PLAY(126)和KEYCODE_MEDIA_PAUSE(127)。
答案 2 :(得分:0)
请注意,自编写接受的答案以来,此API已更改。请参阅MediaSession callbacks documentation。