2011-11-09 123 views
7

我的應用流式傳輸音樂,我希望能夠暫停/播放/跳過任何可能支持這些按鈕(汽車,耳機等)的藍牙設備。當通過車載藍牙連接時,音頻會自動通過,但控制按鈕不會影響我的應用的音頻流。它反而會打開默認的媒體播放器。如何路由這些按鈕來影響我的應用程序?Android中的藍牙音頻控制

+0

嗨,你可以分享這樣的代碼示例嗎? –

回答

15

您是否在您的應用中註冊了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也有關於這個問題的一些很好的信息。

+0

我看到'MEDIA_BUTTON'事件通過日誌,所以這看起來很有希望。明天我會放棄它。 –

5

accepted answer,請注意,鍵碼中的一個冰淇淋三明治已經改變:

是獲取遊戲中傳遞的鍵碼/暫停意圖在 ICS已經改變。看到了之前ICS發送此 http://code.google.com/p/media-button-router/issues/detail?id=10#c5

鍵碼是 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