Chromecast Custom MediaRouteChooserDialog - PullRequest
0 голосов
/ 10 июня 2018

У меня проблемы с настройкой диалогов MediaRouteChooser / MediaRouteController (мне потребуются другие макеты, некоторые дополнительные действия).

Кнопка каста настраивается путем вызова CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, R.id.media_route_menu_item); внутри onCreateOptionsMenu.

Я понял, что мне нужно расширить MediaRouteDialogFactory, где я возвращаю свой собственный MediaRouteChooserDialogFragment, где я перезаписываю onCreateChooserDialog и возвращаю свой собственный диалог.Однако это должно быть MediaRouteChooserDialog, но расширять его не имеет особого смысла (вам нужно будет продублировать весь код, потому что все закрыто, и вы не можете их использовать, например mRouter, mCallback).

Мой вопрос заключается в том, как я могу сделать и показать свой собственный диалог и список маршрутов самостоятельно, а также сохранить решение CastButtonFactory.setUpMediaRouteButton внутри onCreateOptionsMenu?Я действительно не хочу беспокоиться о состояниях кнопок Chromecast, таких как видимость, состояние соединений, решать, нужно ли мне показывать выбор маршрута или контроллер маршрута и т. Д. Я даже не уверен, как мне составить список маршрутов / управлять обнаружением, поэтомунебольшая помощь была бы хороша и по этой теме.

1 Ответ

0 голосов
/ 25 апреля 2019

Я решил это сам, и он прекрасно работает для меня.Вот то, что я сделал в двух словах, может быть, это дает некоторые идеи.

Я создал CustomMediaRouteDialogFactory, который расширяет MediaRouteDialogFactory и предоставил свои собственные диалоги, переопределив onCreateChooserDialogFragment и onCreateControllerDialogFragment.Эти диалоги расширяют исходные диалоги выбора и контроллера из каркаса.

Состояние кнопки приведения на панели инструментов по-прежнему управляется автоматически, я только что передал свой собственный селектор маршрутов и фабрику диалогов поставщику.

onCreateOptionsMenu :

MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
mediaRouteActionProvider.setRouteSelector(chromecastManager.getMediaRouteSelector());
mediaRouteActionProvider.setDialogFactory(mediaRouteDialogFactory);

Недостаток: я закончил тем, что написал собственный код обнаружения и фильтрации маршрутов, изучив исходный код реализации диалогового окна выбора платформы и некоторые другиедругие зависимости.Во-вторых, диалог контроллера напрямую связывается с RemoteMediaClient.

Таким образом, я мог сделать все по своему усмотрению, но мне потребовалась дополнительная работа.

...