Android: что мне не совсем понятно в MediaSessionManager и RemoteController
Я пытался просматривать веб-страницы, чтобы увидеть, что MediaSessionManager делает и для чего использует RemoteController (устарело с API 21), чтобы понять, могут ли эти API решить мою проблему.
В данный момент я использую AudioManger и отправляю ключевое событие для остановки / приостановки / воспроизведения текущего аудио с другого музыкального плеера... Это делает свою работу. Теперь мне интересно, можно ли это сделать для медиаплеера, например, приложения YouTube, которое воспроизводит видео и мое приложение с другого устройства может действовать как пульт дистанционного управления для управления воспроизведением видео на втором устройстве.
Я закончил тем, что прочитал MediaSessionManager. Он дает все активные медиа-сессии с проигрывателями музыки, которые в данный момент воспроизводятся. Я не уверен, что это правильное решение для решения моего сценария выше. Так как я работаю на Android 4.4.2, я думаю, что MediaSessionManager, вероятно, не правильный путь, поэтому я нашел что-то под названием RemoteController, но не уверен, как это действительно работает и помогает ли это решить мою проблему
Здесь слишком много всего, я не знаю, с чего начать.
2 ответа
И то и другое RemoteController
и MediaController
экземпляры, доступные через MediaSessionManager, являются только локальными - они позволяют одному приложению на устройстве управлять воспроизведением другого приложения.
Если вы поддерживаете только устройства API 21+, MediaSessionManager
Намного легче работать и надежнее, чем RemoteController
, но если вы также хотите поддерживать устройства KitKat, то нет другого выбора, кроме RemoteController
,
Конечно, как только пользователи включили NotificationListenerService на устройстве, которым вы хотите управлять, вы можете создать любой протокол обмена данными между устройствами, который вы хотите, отправлять состояние мультимедиа на другое управляющее устройство и отправлять команды обратно на устройство, которым вы хотите управлять. Однако эта инфраструктура была бы чем-то уникальным для вашего приложения - нет встроенных классов, которые делают это.
Вы можете легко создавать ожидающие Интенты, которые будут обрабатываться получающими контроллерами, используя
MediaButtonReceiver.buildMediaButtonPendingIntent()
И добавление
MediaButtonReceiver.handleIntent()
В коде получателя