Ответ 1
Чтобы получать события с медиа-кнопками, вам необходимо:
-
установить MediaSession.Callback и обработать соответствующие события (*)
-
установить
MediaSession.FLAG_HANDLES_MEDIA_BUTTONS
иMediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS
флаги -
установите mediaSession в активную
-
правильно настройте состояние воспроизведения в специальных действиях (событиях воспроизведения), которые обрабатывает ваш сеанс. Например:
PlaybackState state = new PlaybackState.Builder() .setActions( PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE | PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS) .setState(PlaybackState.STATE_PLAYING, position, speed, SystemClock.elapsedRealtime()) .build(); mSession.setPlaybackState(state);
Я предполагаю, что вам не хватает # 4, потому что вы все делаете правильно.
(*) стандартная реализация Callback.onMediaButtonEvent обрабатывает все обычные медиа-кнопки и вызывает соответствующие методы onXXXX() (onPlay, onPause, onSkipToNext и т.д.). Если вам не нужно обращаться с необычными медиа-кнопками - или для целей отладки - вам не нужно переопределять onMediaButtonEvent.