首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保持Google接收方存活和/或发送方连接

保持Google接收方存活和/或发送方连接
EN

Stack Overflow用户
提问于 2017-10-05 10:34:51
回答 3查看 969关注 0票数 0

我正在为一家需要执行两项任务的商店编写一个Cast应用程序:

  • 在背景中显示一些广告(静态图像)(可能具有平滑的图像转换);
  • 在角落里显示“我们在服务”号码。

我已经开发了应用程序(包括自定义接收方和Android发送方)。广告由服务器提供,因此嵌入到接收方应用程序中,而发送方应用程序用于控制“我们正在服务”号。

一切都很有魅力,但过了几分钟,发件人断开了连接,接收者退出了,屏幕上留下了谷歌Chromecast背景图片。

虽然我可以接受发送者断开连接(即使我想避免它),接收者应用程序退出是不可接受的。

我试着通过CastSession.sendMessage()发送保持活动的消息,但是没有成功。

我想在一个隐藏的媒体播放器中播放一些内容来欺骗它,让它以为我在玩什么,但我认为这是一个非常肮脏的解决方案。

是否有可能以更好的方式实现我正在努力做的事情?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-07 00:56:52

我对这个问题做了进一步的调查,发现问题在于接收者中的玩家处于空闲状态太长时间,因此关闭应用程序和与发送者的任何连接。

AFAIK,没有办法以干净的方式避免这种行为,所以我选择了肮脏的解决方案。我在接收器里放了一个隐藏的媒体播放器,然后我发送给它一个不存在的图像。它试图加载映像(进入状态缓冲),但失败了。以这种方式,它重置空闲计时器,应用程序不再退出。

我希望这会对将来的其他人有所帮助。

编辑:添加了更长的解释

为了解决这个问题,我必须添加cast媒体播放器标记并通过接收程序中的CSS隐藏它:

代码语言:javascript
运行
复制
<head>
    <style>
        cast-media-player {
            display: none;
        }   
    </style>
</head>
<body>
    <!-- My content -->
    <cast-media-player></cast-media-player>
</body>

在此之后,我向Android发送者应用程序添加了一个循环,每30秒(即使超时时间更长),也可能会运行一次,要求播放器显示给定的图像:

代码语言:javascript
运行
复制
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请求,而播放器状态上的侦听器只在映像处于空闲状态时才请求它,但我现在没有足够的时间尝试它。如果我愿意,我会更新我的答案。

目前我无法共享完整的应用程序代码,但我打算在将来在GitHub上发布它。项目一做好,我就会更新我的答案。

票数 0
EN

Stack Overflow用户

发布于 2021-09-17 05:23:57

一个更简单的解决方案是设置disableIdleTimeout:在传递给CastReceiverContext.start()的CastReceiverOptions中为true。这会让你的接收器保持运转。

示例(带有CastReceiverOptions内联结构的代码):

context = cast.framework.CastReceiverContext.getInstance();context.start({disableIdleTimeout: true});

票数 1
EN

Stack Overflow用户

发布于 2017-10-06 09:02:01

看一下

cast.framework.CastReceiverOptions.maxInactivity

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46583554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档