@TargetApi(19) private void handleMediaKey(KeyEvent e){
  if (Build.VERSION.SDK_INT < 19)   return;
switch (e.getKeyCode()) {
case KeyEvent.KEYCODE_MUTE:
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_MEDIA_PLAY:
case KeyEvent.KEYCODE_MEDIA_PAUSE:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
case KeyEvent.KEYCODE_MEDIA_STOP:
case KeyEvent.KEYCODE_MEDIA_NEXT:
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
case KeyEvent.KEYCODE_MEDIA_REWIND:
case KeyEvent.KEYCODE_MEDIA_RECORD:
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
case KeyEvent.KEYCODE_MEDIA_CLOSE:
case KeyEvent.KEYCODE_MEDIA_EJECT:
case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK:
    AudioManager am=(AudioManager)mActivity.getSystemService(Context.AUDIO_SERVICE);
  am.dispatchMediaKeyEvent(e);
break;
default :
break;
}
}

@ TargetApi ( 19 ) private void handleMediaKey ( KeyEvent e ) { if ( Build . VERSION . SDK_INT < 19 ) return ; switch ( e . getKeyCode ( ) ) { case KeyEvent . KEYCODE_MUTE : case KeyEvent . KEYCODE_HEADSETHOOK : case KeyEvent . KEYCODE_MEDIA_PLAY : case KeyEvent . KEYCODE_MEDIA_PAUSE : case KeyEvent . KEYCODE_MEDIA_PLAY_PAUSE : case KeyEvent . KEYCODE_MEDIA_STOP : case KeyEvent . KEYCODE_MEDIA_NEXT : case KeyEvent . KEYCODE_MEDIA_PREVIOUS : case KeyEvent . KEYCODE_MEDIA_REWIND : case KeyEvent . KEYCODE_MEDIA_RECORD : case KeyEvent . KEYCODE_MEDIA_FAST_FORWARD : case KeyEvent . KEYCODE_MEDIA_CLOSE : case KeyEvent . KEYCODE_MEDIA_EJECT : case KeyEvent . KEYCODE_MEDIA_AUDIO_TRACK : AudioManager am = ( AudioManager ) mActivity . getSystemService ( Context . AUDIO_SERVICE ) ; am . dispatchMediaKeyEvent ( e ) ; break ; default : break ; } }
redispatches unhandled media keys . this allows bluetooth headphones with play / pause or other buttons to function correctly .
