Intereting Posts
Существуют ли библиотеки, похожие на проект Three20 для Android? Как изменить цвет текста элементов списка в AlertDialog Студия Android занимает слишком много памяти Android-соединение между хостом и последовательным интерфейсом USB? Как я могу определить разделы Android-устройства из оболочки? AVD по умолчанию в Android Studio В чем разница между sendStickyBroadcast и sendBroadcast в Android? Как использовать ScrollView в Android? Adb не находит мое устройство / телефон (MacOS X) Сохранить изображение, записанное во внутреннем хранилище? Отправка html-адреса электронной почты в android с помощью <table> и т. Д. – действительно ли нет встроенного способа Intent? Как отправить данные с помощью намерения в андроид без открытия другого действия? ListView из WebViews – повторное использование элементов разной высоты; Запрашивает все представления перед отображением любых Отменить или отключить меню настроек Какой путь к файловой системе используется в Context.openFileOutput () Android?

Управление медиа-кнопками в Android 5.0 Lollipop

Pre API 21 Я использовал вызов типа audioManager.registerMediaButtonEventReceiver(receiver); Для обработки событий мультимедийных кнопок, когда пользователь нажал кнопку на своей гарнитуре. Что касается API 21, кажется, что MediaSession следует использовать. Однако я не получаю никакого ответа.

 final MediaSession session = new MediaSession(context, "TAG"); session.setCallback(new Callback() { @Override public boolean onMediaButtonEvent(final Intent mediaButtonIntent) { Log.i("TAG", "GOT EVENT"); return super.onMediaButtonEvent(mediaButtonIntent); } }); session.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS); session.setActive(true); 

Выше это то, что я думаю, должно работать, но не делает. Кто-нибудь знает, почему это не работает или как я должен зарегистрироваться?

Solutions Collecting From Web of "Управление медиа-кнопками в Android 5.0 Lollipop"

Чтобы получать события с медиа-кнопками, вам необходимо:

  1. Установите MediaSession.Callback и обработайте соответствующие события (*)

  2. MediaSession.FLAG_HANDLES_MEDIA_BUTTONS флаги MediaSession.FLAG_HANDLES_MEDIA_BUTTONS и MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS

  3. Установите mediaSession на активное

  4. Правильно настройте состояние воспроизведения в специальных действиях (событиях воспроизведения), которые обрабатывает ваша сессия. Например:

     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.