#android #service #widget #media
#Android #Обслуживание #виджет #Медиафайлы
Вопрос:
Мой сервис расширяет класс MediaBrowserService и реагирует на определенные действия MediaController, такие как getMediaController().getTransportControls().onPlay()
. Однако я не нашел способа «контролировать» свой сервис из виджета, потому что класс MediaController недоступен из него. Как я могу взаимодействовать со своим сервисом?
Ответ №1:
Рекомендуемый подход заключается в использовании MediaButtonReceiver, который будет пересылать вам команды MediaBrowserService
, где вы затем сможете их обрабатывать, добавив вызов MediaButtonReceiver.handleIntent() в onStartCommand
соответствии с документацией.
Вы можете использовать buildMediaButtonPendingIntent() Для создания PendingIntent
для различных мультимедийных кнопок (таких как воспроизведение, пауза и т. Д.), Которые Затем можно установить на кнопки вашего виджета с помощью setOnClickPendingIntent()
Комментарии:
1. Спасибо за такой подробный ответ. Однако у меня все еще есть один вопрос. Как я могу отслеживать состояние сеанса (текущие метаданные песни, состояние воспроизведения) из виджета приложения?
2. Синхронного способа получения этой информации не существует, поэтому вам нужно будет использовать сервис для обновления вашего виджета. Затем эта служба может подключаться через a
MediaBrowser
и создавать aMediaController
из токена сеанса.3. @ianhanniballake Как мне работать с сервисом? Должен ли я запускать службу при включении виджета и останавливать ее при отключении?
4. @Ishaan — это не так, как
MediaBrowserService
работает, нет. Я бы посоветовал прочитать документацию по созданиюMediaBrowserService
.MediaButtonReceiver
правильно ли запускать правильный обратный вызов сеанса мультимедиа5. @ianhanniballake Спасибо за ответ, но я не имел в виду MediaBrowserService. Вы предположили, что мне нужно использовать сервис для обновления виджета и подключения к MediaBrowser. Я имел в виду именно этот сервис.