2011-11-09 25 views
7

私のアプリは音楽をストリーミングし、これらのボタン(車、ヘッドセットなど)をサポートする可能性があるBluetoothデバイスからの一時停止/再生/スキップを可能にしたいと考えています。車のBluetooth経由で接続すると、オーディオは自動的に送信されますが、コントロールボタンはアプリケーションのオーディオストリームに影響しません。代わりにデフォルトのメディアプレーヤーが開きます。アプリに影響を与えるためにこれらのボタンをルーティングするにはどうすればよいですか?AndroidのBluetoothオーディオコントロール

+0

こんにちは、あなたはこの同じのためのサンプルコードを共有することはできますか? –

答えて

15

アプリにBroadcastReceiverを登録してMEDIA_BUTTONイベントを聞くにはAudioManager.registerMediaButtonEventReceiver()を使用しましたか?

登録後、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)のための2つの別個のキーコード があります。

KEYCODE_MEDIA_PLAY(126)とKEYCODE_MEDIA_PAUSE(127)を送信しています。

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