【问题标题】:MediaRouter connect second timeMediaRouter 连接第二次
【发布时间】:2014-07-24 14:20:13
【问题描述】:

我正在使用 Android 的 MediaRouter / Presentation API(support.v7 版本)。

到目前为止一切正常。唯一没有的是:

当我退出我的活动(例如拆解并删除回调)时,一切仍然正常。

但是,当开始这个活动时(之前的 mediarouter-activity 被强制完成,因此 onPause/onDestroy 被称为 FOR SURE => 所以那里的那些回调也消失了,如我的调试消息中所示)稍后再次时间点,回调被创建和添加以及一切。只是,没有更多的 onRouteAdded 被调用,只有 onProviderChanged (使用默认提供程序,因此无用)。

它总是这样工作(使用 wifi 显示 [miracast]、模拟辅助显示、chromecast 辅助显示..)。有没有示例中没有的解决方案?

你想看一些代码吗?有哪些特殊情况? (不能全部发布..)

到目前为止我找不到任何东西,提前感谢您的帮助。

【问题讨论】:

    标签: android chromecast presentation


    【解决方案1】:

    如果您更改 Google Cast 示例应用以支持 MediaRouter.Callback: https://github.com/googlecast/CastPresentation-android

    然后我每次都会调用 onRouteAdded。

    【讨论】:

    • 您是否使用 (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);或通过(支持方法) MediaRouter.getInstance(Context) ?那里可能有区别。?
    【解决方案2】:

    使用 getSelectedRoute() 而不是 RouteInfo(由回调提供)为我完成了这项工作。

    MediaRouter.RouteInfo selectedRoute = getHelper().getMediaRouter().getSelectedRoute();
    if(provider != null && getCurrentRoute() != null && getCurrentRoute().equals(selectedRoute)){
        Log.d(TAG, "only provider changes, dont do anything");
        return false;
    }
    
    if (selectedRoute != null) {
        setCurrentRoute(selectedRoute);
    }
    
    return updateContents();
    

    这确实很奇怪(因为其余代码看起来与提供的 google android 开发人员示例中的完全一样),但它确实有效。

    【讨论】:

      【解决方案3】:

      我知道这个问题在 1 年前就已经解决了,但它可能不是完美的解决方案。也许它对其他人有用。

      我有类似的问题,症状完全相同(不再调用 onRouteAdded)。在我的情况下,它是由 MediaRouter 的不正确实现停用引起的:要正确停用它,您不仅应该删除所有回调,还应该选择默认 MediaRoute。

      if (!mMediaRouter.getDefaultRoute().isSelected()) {
          mMediaRouter.getDefaultRoute().select();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-20
        • 2015-12-29
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多