2011-11-09 20 views
7

La mia app trasmette musica e voglio essere in grado di mettere in pausa/riprodurre/saltare da qualsiasi dispositivo Bluetooth che potrebbe supportare questi pulsanti (auto, cuffie, ecc.). Se connesso tramite il bluetooth di un'automobile, l'audio passa automaticamente, ma i pulsanti di controllo non influiscono sul flusso audio della mia app. Apre invece il lettore multimediale predefinito. Come faccio a instradare questi pulsanti per influenzare la mia app?Controlli audio Bluetooth in Android

+0

Ciao, Puoi condividere codice di esempio per lo stesso? –

risposta

15

Hai registrato un BroadcastReceiver nella tua app per ascoltare gli eventi MEDIA_BUTTON utilizzando AudioManager.registerMediaButtonEventReceiver()?

Dopo la registrazione, gli eventi del pulsante possono essere gestiti elaborando l'oggetto KeyEvent collegato negli extra come EXTRA_KEY_EVENT. Per esempio:

@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; 
    } 
} 

Questo Android Developer blog post hanno anche qualche bella informazioni sul tema.

+0

Ho visto eventi di 'MEDIA_BUTTON' attraverso il log, quindi questo sembra promettente. Domani darò un via. –

5

A seguito della accepted answer, si prega di essere consapevole del fatto che una delle keycodes è cambiato in Ice Cream Sandwich:

Il codice chiave che viene passato per il gioco/pausa intento è cambiato nella ICS. Vedere questo http://code.google.com/p/media-button-router/issues/detail?id=10#c5

Il codice chiave che era stato inviato prima di ICS era KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE. Ora ci sono due keycode separati per riproduzione e pausa (126 e 127).

Sta inviando KEYCODE_MEDIA_PLAY (126) e KEYCODE_MEDIA_PAUSE (127).

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