Как я могу использовать MediaBrowserService с виджетом?

#android #service #widget #media

#Android #Обслуживание #виджет #Медиафайлы

Вопрос:

Мой сервис расширяет класс MediaBrowserService и реагирует на определенные действия MediaController, такие как getMediaController().getTransportControls().onPlay() . Однако я не нашел способа «контролировать» свой сервис из виджета, потому что класс MediaController недоступен из него. Как я могу взаимодействовать со своим сервисом?

Ответ №1:

Рекомендуемый подход заключается в использовании MediaButtonReceiver, который будет пересылать вам команды MediaBrowserService , где вы затем сможете их обрабатывать, добавив вызов MediaButtonReceiver.handleIntent() в onStartCommand соответствии с документацией.

Вы можете использовать buildMediaButtonPendingIntent() Для создания PendingIntent для различных мультимедийных кнопок (таких как воспроизведение, пауза и т. Д.), Которые Затем можно установить на кнопки вашего виджета с помощью setOnClickPendingIntent()

Комментарии:

1. Спасибо за такой подробный ответ. Однако у меня все еще есть один вопрос. Как я могу отслеживать состояние сеанса (текущие метаданные песни, состояние воспроизведения) из виджета приложения?

2. Синхронного способа получения этой информации не существует, поэтому вам нужно будет использовать сервис для обновления вашего виджета. Затем эта служба может подключаться через a MediaBrowser и создавать a MediaController из токена сеанса.

3. @ianhanniballake Как мне работать с сервисом? Должен ли я запускать службу при включении виджета и останавливать ее при отключении?

4. @Ishaan — это не так, как MediaBrowserService работает, нет. Я бы посоветовал прочитать документацию по созданию MediaBrowserService . MediaButtonReceiver правильно ли запускать правильный обратный вызов сеанса мультимедиа

5. @ianhanniballake Спасибо за ответ, но я не имел в виду MediaBrowserService. Вы предположили, что мне нужно использовать сервис для обновления виджета и подключения к MediaBrowser. Я имел в виду именно этот сервис.