【问题标题】:Bluetooth audio controls in AndroidAndroid 中的蓝牙音频控制
【发布时间】:2011-12-25 17:43:09
【问题描述】:

我的应用流式传输音乐,我希望能够从任何可能支持这些按钮的蓝牙设备(汽车、耳机等)暂停/播放/跳过。通过汽车的蓝牙连接时,音频会自动通过,但控制按钮不会影响我的应用程序的音频流。而是打开默认媒体播放器。如何路由这些按钮以影响我的应用?

【问题讨论】:

  • 嗨,你能分享一下同样的示例代码吗?

标签: android bluetooth


【解决方案1】:

您是否在应用中注册了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 事件从日志中传来,所以这看起来很有希望。我明天试试看。
【解决方案2】:

除了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)。

https://code.google.com/p/android/issues/detail?id=23172

【讨论】:

    【解决方案3】:

    请注意,自编写接受的答案以来,此 API 已更改。请参考MediaSession callbacks documentation。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多