我对此问题进行了进一步调查,发现问题在于接收方的播放器处于空闲状态的时间过长,因此关闭了应用程序以及与发送方的任何连接。
AFAIK,没有办法以干净的方式避免这种行为,所以我选择了肮脏的解决方案。我在接收器中放置了一个隐藏的cast-media-player,然后向它发送了一个不存在的图像。它尝试加载图像(进入状态 BUFFERING),但失败了。以这种方式它重置了空闲计时器并且应用程序不再退出。
我希望这对以后的其他人有所帮助。
编辑:添加了更长的解释
为了解决这个问题,我不得不添加 cast-media-player 标签并通过接收器应用程序中的 CSS 隐藏它:
<head>
<style>
cast-media-player {
display: none;
}
</style>
</head>
<body>
<!-- My content -->
<cast-media-player></cast-media-player>
</body>
之后,我向 Android 发送应用程序添加了一个循环,该循环每 30 秒(即使超时时间更长也可能会起作用)要求播放器显示给定图像:
private void playFakeContent() {
final String addr = "http://your.domain.here/404image.png";
CastSession session = mSessionManager.getCurrentCastSession();
if (null != session) {
MediaInfo.Builder builder = new MediaInfo.Builder(addr)
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setContentType("image/png")
.setMetadata(new MediaMetadata(MediaMetadata.MEDIA_TYPE_PHOTO));
session.getRemoteMediaClient().load(builder.build(), true);
}
}
我还在前台的应用程序上放置了一项服务,以确保 Android 不会杀死我手机上的应用程序。
可能应该有一些改进的空间,例如在给定的时间内播放实际图像以避免无用的 HTTP 请求,并且 Player 状态的侦听器仅在图像进入 IDLE 状态时才请求图像,但是我现在没有足够的时间尝试它。
如果我愿意,我会更新我的答案。
我目前无法分享完整的应用程序代码,但我打算将来在 GitHub 上发布它。项目准备就绪后,我会立即更新我的答案。