Как отключиться от Cast при завершении Activity?

Вот что я делаю:

  • Подключение к ChromeCast вручную через настройки.
  • Запуск моего приложения, которое управляет презентацией для отображения пользовательского макета с помощью устройства ChromeCast, к которому я уже подключен.
  • Завершение моего приложения, закрыв его вручную.
  • К этому времени я все еще могу видеть трансляцию экрана своего устройства. Здесь я хочу программно отключиться от кастинга, чтобы больше не видеть трансляцию экрана.

Во время презентации у меня есть доступ к дисплею, на который я транслирую:

MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
    return route != null ? route.getPresentationDisplay() : null;

Любые идеи о том, как достичь этой функциональности?

ОБНОВИТЬ:

Для тех, кому это интересно, вот как я это сделал (спасибо за ответ Али Наддафа):

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public void disconnect(){
    MediaRouter mMediaRouter = (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);
    mMediaRouter.selectRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO, mMediaRouter.getDefaultRoute());
}

person LarryMustaine    schedule 07.04.2015    source источник


Ответы (4)


Если я правильно понимаю, у вас есть пользователь, запускающий трансляцию/зеркалирование экрана вне вашего приложения. Затем пользователь входит в ваше приложение, и когда они уходят, вы хотите отключиться? Если я не прав, пожалуйста, дайте мне знать.

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

person Ali Naddaf    schedule 08.04.2015
comment
Да, вы правы, это то, чего я пытаюсь добиться. Я попытался создать подключение для трансляции с помощью MediaRouteActionProvider, чтобы отобразить значок трансляции на панели инструментов и подключиться оттуда, я использовал отправителя по умолчанию для настройки подключения, но при попытке отправить презентацию на устройство трансляции он не найдет никаких доступный дисплей, чтобы сделать это, когда даже бросок происходит. Я не нашел ни одного примера для создания соединения и отправки презентации на транслируемое устройство. Вот почему я позволяю пользователю подключаться вручную, и я хотел отключиться, когда действие будет завершено. - person LarryMustaine; 08.04.2015
comment
На данный момент существует API, который позволяет разработчикам создавать скринкасты. Если пользователь вручную выбирает запуск приведения вне вашего кода, дайте ему/ей указание завершить его, когда они уходят, но не пытайтесь отключиться программно по причине, которую я указал; вы не знаете, почему пользователь за пределами вашего приложения вообще запустил показ экрана. - person Ali Naddaf; 08.04.2015
comment
Али, спасибо за поддержку, я это очень ценю. Я полностью согласен с вами насчет того, чтобы попросить пользователя отключиться, а не делать это самостоятельно в коде. Итак, две вещи. Во-первых, если есть какой-либо пример, который инструктирует, как создать демонстрацию экрана, чтобы быть готовым к использованию с Presentation API, как я уже сказал, я установил соединение, но не смог обнаружить доступный дисплей для презентации (для этого я использую код, который я разместил по вопросу), и второй, как бы вы сделали, чтобы программно отключить скрин-каст? (Соглашусь не делать этого) - person LarryMustaine; 08.04.2015
comment
чтобы отключиться, я полагаю, что установка маршрута на маршрут по умолчанию должна отключить вас; вы можете попробовать это и посмотреть, работает это или нет: mMediaRouter.unselect(reason) или mMediaRouter.selectRoute(mMediaRouter.getDefaultRoute()). Пример, связанный с презентацией, см. здесь: github.com/googlecast/CastPresentation-android. - person Ali Naddaf; 08.04.2015

Для тех, кто, как и я, искал ответ, используя v3 Cast SDK:

mSessionManager.endCurrentSession(true);
person Alqueraf    schedule 09.08.2016
comment
Мне кажется, что отключаются все устройства, подключенные к хромкасту, а не только то, которое запрашивает endCurrentSession. Может быть, есть какая-то более сладкая капля связи :) - person Manuela; 27.06.2017

Найдите SessionManager, как показано ниже, и отключитесь от сеанса Chromecast:

    mRemoteMediaClient.stop(); // stop remote media
    CastContext castContext = CastContext.getSharedInstance(this);
    SessionManager mSessionManager = castContext.getSessionManager();
    mSessionManager.endCurrentSession(true);
person Shivang    schedule 14.02.2018

Это сработало для меня:

mediarouter.unselect(0)
person Blapple    schedule 03.05.2016