首页 > 解决方案 > 单击默认 MediaRouteControllerDialog 中的“停止投射”后,Chromecast 继续播放

问题描述

单击使用的默认对话框中的“停止投射”按钮MediaRouteButton会触发回调SessionManagerListener::onSessionEnded并关闭 Chromecast 通知控件。但是视频一直在电视上播放。

我也在使用com.google.android.exoplayer2.ext.cast.CastPlayer启动 Chromecast。回调也被SessionAvailabilityListener::onCastSessionUnavailable触发。

使用 Chromecast 通知的关闭按钮时不会出现此问题。

标签: androidchromecastexoplayer

解决方案


当您单击“停止投射”按钮时会发生什么情况MediaRouter::unselect是调用此方法。您需要做的是聆听何时发生这种情况并手动结束当前会话。

这是一个例子:

MediaRouter.getInstance(context).addCallback(
    MediaRouteSelector
        .Builder()
        .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
        .build(),
    object: MediaRouter.Callback() {
        override fun onRouteUnselected(
            router: MediaRouter?,
            route: MediaRouter.RouteInfo?,
            reason: Int
        ) {
            if(reason in listOf(MediaRouter.UNSELECT_REASON_STOPPED, MediaRouter.UNSELECT_REASON_DISCONNECTED)) {
                CastContext.getSharedInstance(context).sessionManager.endCurrentSession(true)
            }
        }
    }
)

推荐阅读