【问题标题】:How to disconnect from Cast when finishing Activity?完成 Activity 时如何断开与 Cast 的连接?
【发布时间】:2015-06-12 13:39:21
【问题描述】:

这是我正在做的事情:

  • 通过设置手动连接到 ChromeCast。
  • 启动我的应用程序,该应用程序管理演示文稿以使用我已连接的 ChromeCast 设备显示自定义布局。
  • 通过手动关闭我的应用程序来完成它。
  • 此时,我仍然可以看到我的设备屏幕投射。这是我想以编程方式断开投射的地方,因此我无法再看到屏幕投射。

在进行演示时,我可以访问要投射到的显示器:

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

关于如何实现此功能的任何想法?

更新:

对于那些对此感兴趣的人,我就是这样做的(感谢 Ali Naddaf 的回复):

@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());
}

【问题讨论】:

    标签: android casting chromecast display-manager


    【解决方案1】:

    对于像我这样使用 v3 Cast SDK 来寻找答案的人:

    mSessionManager.endCurrentSession(true);
    

    【讨论】:

    • 在我看来,连接到 chromecast 的所有设备都已断开连接,而不仅仅是请求 endCurrentSession 的设备。也许有一些更甜蜜的联系:)
    【解决方案2】:

    如下找到 SessionManager 并断开与 chromecast 会话的连接:

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

    【讨论】:

      【解决方案3】:

      如果我理解正确,您是在让用户在您的应用之外启动屏幕投射/镜像。然后用户进入您的应用程序,当他们离开时,您要断开连接吗?如果我不正确,请告诉我。

      可以断开屏幕镜像,但我不确定这样做是否正确。当用户进入您的应用时,您不知道用户是否因为您的应用或其他原因打开了屏幕投射。如果用户在进入您的应用程序之前出于某种其他原因这样做了,那么您的应用程序在离开时断开用户连接是不正确的。你会同意吗?

      【讨论】:

      • 是的,你是对的,这就是我想要达到的目标。我尝试使用 MediaRouteActionProvider 创建投射连接以在工具栏上显示投射图标并从那里连接,我使用默认发送器来配置连接,但是当尝试将演示文稿发送到投射设备时,它不会找到任何可用的显示器来做到这一点,即使演员正在发生。我还没有找到任何示例来创建连接并将演示文稿发送到投射设备。这就是为什么我让用户手动连接并且我想在活动完成后断开连接。
      • 截至目前,已有 API 允许开发人员创建投屏体验。如果用户手动选择在您的代码之外启动演员表,则指示他/她在他们离开时结束演员表,但不要因为我所说的原因而尝试以编程方式断开连接;您不知道为什么用户在您的应用之外首先启动了屏幕投射。
      • 阿里,感谢您的支持,非常感谢。我完全同意你告诉用户断开连接而不是自己在代码中做的事情。所以有两件事,第一件事,如果有任何示例说明如何创建一个屏幕播放体验,以便准备好与 Presentation API 一起使用,正如我所说,我已经完成了连接,但无法检测到可用的演示文稿的显示(为此,我使用了我在问题上发布的代码),第二个,您将如何以编程方式断开屏幕投射? (我同意不这样做)
      • 断开连接,我想将路由设置为默认路由应该会断开连接;你可以试试看它是否有效:mMediaRouter.unselect(reason) 或 mMediaRouter.selectRoute(mMediaRouter.getDefaultRoute())。有关演示文稿的示例,请查看:github.com/googlecast/CastPresentation-android
      【解决方案4】:

      这对我有用:

      mediarouter.unselect(0)
      

      【讨论】:

        猜你喜欢
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多