【发布时间】:2011-12-25 17:43:09
【问题描述】:
我的应用流式传输音乐,我希望能够从任何可能支持这些按钮的蓝牙设备(汽车、耳机等)暂停/播放/跳过。通过汽车的蓝牙连接时,音频会自动通过,但控制按钮不会影响我的应用程序的音频流。而是打开默认媒体播放器。如何路由这些按钮以影响我的应用?
【问题讨论】:
-
嗨,你能分享一下同样的示例代码吗?
我的应用流式传输音乐,我希望能够从任何可能支持这些按钮的蓝牙设备(汽车、耳机等)暂停/播放/跳过。通过汽车的蓝牙连接时,音频会自动通过,但控制按钮不会影响我的应用程序的音频流。而是打开默认媒体播放器。如何路由这些按钮以影响我的应用?
【问题讨论】:
您是否在应用中注册了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 也有关于这个主题的一些很好的信息。
【讨论】:
MEDIA_BUTTON 事件从日志中传来,所以这看起来很有希望。我明天试试看。
除了accepted answer,请注意冰淇淋三明治中的其中一个键码已更改:
为播放/暂停意图传递的键码已更改 集成电路。看到这个 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)。
【讨论】:
请注意,自编写接受的答案以来,此 API 已更改。请参考MediaSession callbacks documentation。
【讨论】: