用例-使用Bintray JCenter为每个Android应用程序带来通用谷歌Cast功能

文摘:

Kevin Nilson /技术主管兼经理、谷歌解决方案工程师,2016年5月:您是否想过扩展您的Android应用程序,以支持多屏幕体验,利用像电视这样的大型显示设备?谷歌Cast允许您与谷歌Cast接收器设备(例如Chromecast)共享内容。Cast Android发送器使用Android手机或平板电脑的熟悉控件来控制应用程序在大屏幕上的体验。
在这次演讲中,我们将讨论Android发送器应用程序开发。我们还将介绍一些保持Cast体验简单、直观和可预测的最佳实践。

讨论转录:

大家都好吗?

(观众)难以置信。好。

太好了。我们可以开始了吗?

(观众)是的。

太棒了。好了,开始吧。我是凯文·尼尔森。我与谷歌合作,在Chromecast上担任技术解决方案工程师。请举手,在座的每个人都有Chromecast吗?有人为Chromecast写过应用程序吗?一对。哇。太棒了。剩下的人,我们今天要改变现状。 All right? All right, here we go.

所以,Chromecast,我们都知道,喜欢坐着看电视,做一个沙发土豆。但它不仅仅是这样,它还包括,你知道,和朋友和家人坐在一起,一起合作,享受一些东西。这很有趣。

我们注意到的一件事是人们看了很多电视。无论是在Chromecast上,在Apple TV上,在Roku上,在Fire Stick上,你知道,在这个领域的任何人,我只想指出人们每天花在电视上的时间。你们注意到,我们在美国,我敢肯定我们有来自世界各地的人,美国赢得了这场比赛。

(观众)是的。

美国队。我们在那。

但无论如何,这对你来说是一个很好的机会如果你的应用程序有一些内容可以在电视上播放,嗯,你知道,这是一个很好的机会成为其中的一部分。我们会越来越多地看到这种情况,而不是通过电视,而是通过手机。

这是新的Chromecast。我想你们有些人有比较老的那个看起来更像一把钥匙。这是我们不久前推出的新产品。令人兴奋的是我们有了Chromecast音频。你们有音频吗?不,没有任何人。这个音频很棒的地方在于它可以在多个房间同步。你可以在厨房里放一个,在客厅里放一个,在房子的任何地方都可以放一个。这很有趣。这就是电视和音频。

Chromecast的独特之处在于它改变了,让手机成为了遥控器。当用户在使用你的应用时,最酷的是他们可以看着他们的手机,用手机导航,找到他们想玩的东西。所以如果你想一下如果我找到你们,对在座的每一个人说,我给你们一半的人一个遥控器,给你们一半的人一部智能手机,让你们去找《权力的游戏》,很明显,使用手机的人会更快乐,会更容易,会有你们的喜好。在Chromecast,我们认为这就是未来,也是人们消费电视的方式。

所以总结一下我们所做的就是把这个真正沉浸式的17英寸世界和10英尺的体验,向后靠,休闲,放松把这两个世界结合在一起创造出最好的电视体验。

然后我们有sdk, iOS, Android和Chrome,所以你可以在任何地方玩它,在任何地方都有支持。大量的应用程序。这是HBO Now的视频。今天我们有超过1000个应用程序。

现在让我们更深入地讨论一下代码——技术。你们中的一些人可能会感到困惑,为什么凯文说的是谷歌Cast而不是Chromecast。所以谷歌Cast是一种技术,而Chromecast只是一个支持谷歌Cast的加密狗。所以我们有很多扬声器和电视,我们真正希望的是,随着时间的推移,当你买一台电视或扬声器时,里面会有谷歌Cast。所以我们最近推出了具有这种功能的Vizio电视。我们有很多扬声器来自索尼,JVL,很多很多不同的人在那里生产扬声器。

接下来是Chrome发送器。这就像你的iOS或Android或网页应用。接收器是在电视中运行的代码。Chromecast的独特之处在于电视中的代码是HTML和JavaScript。我们马上会讲到如何做到这一点。最后,选角:把一些东西送到电视上。

那么它是如何工作的呢?有人在用手机看YouTube视频。他们抬起头看着他们的电视说,哇,我希望我能在10英尺的屏幕上看电视,而不是在这个小小的4英寸的屏幕上。记住,他们有Chromecast,他们看到Cast图标,他们点击它,发生的事情是,手机连接到电视,连接到你的适配器。然后软件狗直接连接到云端。然后从云端,YouTube被流到你的电视上。这意味着你可以直接从云端传输到电视上。这样你的电池就不会耗尽,数据连接也不会耗尽,手机也不会发热。这一切都是从云端到电视上完成的。之后当你想要控制东西的时候,你可以通过你的手机来做,所以你的手机可以成为遥控器。 You can change the video or using your phone to change the volume.

最后一个很酷的功能是手机,一旦播放开始,它就会消失。所以我经常会在电视上给孩子们扔一些东西,然后去后院倒垃圾,或者打扫车库,或者做其他事情,而孩子们则在家里看电视。

这就是它。这个简单有趣的动画。在扬声器或电视上播放。

现在我想谈谈一些通用的技巧,你知道,你在电视领域做的任何事情。无论是Chromecast,还是Roku, Fire Stick,你知道,任何其他的——苹果电视,任何这些产品。hth华体会最新官方网站

这是一个有趣的例子。我写了这个简单的Cast接收器,它只说hello Cast developer。然后当你看我的电视时,你可以看到在电视下面这里你看到的是hello cast developer,它有点被切断了。有人知道为什么会这样吗?猜测吗?有人知道吗?不。所以电视有一种叫做扫描的东西,这是来自过去的旧显示器和旧技术,但它今天仍然存在。我在电视上展示的是,我从电视上获得的开箱即用的体验当我写一个简单的网页时。所以你需要做的是记住这一点,如果你回想一下你看过的电视节目,你会记得空间通常不靠近屏幕的两侧或顶部。 Sides especially, because you wouldn’t want them cut off. Any kind of logos or any kind of text also you have to be careful with.

接下来我要说的是第二个屏幕是互动。所以Cast是一种第二屏幕体验,你的手机是第一屏幕,然后在屏幕上,大屏幕是你的,你知道,你的第二屏幕。所以一半的人会尝试使用他们的网页应用,因为Chromecast是在适配器中运行的Chrome。他们会尝试运行他们的网络应用,在电视上几乎没有变化。然后就会出现对话,类似于错误信息,类似的东西出现在电视上。你必须记住的是,对于第二屏幕,无论是Cast还是其他技术,用户在进行交互时是在看手机,而不是看电视。

最后一个是老化。你们还记得以前,在图书馆,在这个屏幕上显示得很好。但是今天有没有人能猜到,在今天的现代电视中,这是一个大问题?猜测吗?有人知道吗?

(观众)液晶显示器。

液晶显示器吗?关闭。

(观众)等离子体。

等离子体。有人说等离子体。有六个人说等离子体。那么你认为等离子电视在开始出现老化问题之前需要多长时间?猜测吗?猜测吗?

[观众]几个小时?

两个小时吗?其他人呢?

(观众)30分钟。

三十分钟?是的。所以它实际上是一个很小的数。这取决于电视机,但有几种型号在10分钟内就会对电视机造成永久性损伤。所以当你制作应用时,你必须考虑这一点并为此编写代码。移动logo。然后确保在你的应用中,如果有人暂停了,例如,10分钟后你继续做别的事情。或者,如果—当—回放完成,你正在做一个启动画面,在几个图像中旋转。所以,在电视机领域,一定要记住“老旧”,因为现在有很多昂贵的等离子屏幕,可以获得一些最好的画面。

现在我想谈谈Cast的设计清单。所以我们所做的其中一件事就是整理了一个相当广泛的设计清单。我们真正想要实现的是当有人进入你的应用程序时,它感觉和其他所有的应用程序都一样。所以他们不需要学习Cast是如何工作的,他们已经从其他应用中知道了。很多时候,这是一个小窍门,对Android开发者也是,这是一件事,你知道,在会议上发生在我身上很多次,开发者会来找我说,凯文,我不明白为什么我的应用从来没有被谷歌推荐过。我不明白为什么。我总是问,你对设计清单有什么看法,你知道,你真的看过了吗。在谷歌,设计清单对我们Android平台的重要性不亚于对苹果和iOS平台的重要性。在谷歌上,苹果有一种模式,他们会拒绝你的应用程序,不让你把它放在商店里,我们相信,最好的应用程序会出现在顶部,我们绝对不会把流量引向那些没有设计的应用程序,你知道,它们不符合用户体验指南。

Android和Cast都有指导方针,我们对待这些和苹果一样重要如果你想让你的应用得到谷歌的推荐,我真的鼓励你,一定要去看看设计指导方针。多读几遍,以确保你是合规的。我想告诉你的是,所有被推荐的应用都会经过测试。

酷。太棒了。感谢的人。

好的。它又掉下来了。酷。现在让我们谈谈Android上的Cast SDK。Android的Cast SDK是谷歌Play服务的一部分。正确的。所以谷歌Play Services是一个庞大的整体项目,包含谷歌内的所有服务。很棒的是,它能让用户一直使用最新版本因为他们有这个包含地图,Cast和所有其他安卓服务的代码。它又掉下来了。当你的应用发布时,当你的APK发布到Play Store时它不会因为添加Cast而变得臃肿因为所有繁重的工作都在谷歌Play Services中完成。

Android SDK有一些域对象。CastDevice表示谷歌Cast设备,或软件狗。然后我们有Cast和GoogleApiClient这是你用来控制Cast设备的方式。然后我们有一个MessageReceivedCallback它是用来,指示消息已被接收。还有RemoteMediaPlayer,它允许你控制所有的播放。播放,暂停等等。

现在我们将浏览一些代码。我想展示的第一件事是添加Cast图标到你的应用有多容易,所以通常你会有一个菜单XML,它会有一个菜单,在它里面你能在这里添加一个项目它基本上定义了你的MediaRouteActionProvider这是处理Cast的提供者。您只需在菜单中添加这一项,然后Cast图标将显示在操作栏中。

现在我们将向您展示如何插入代码以使其可见。显示那个按钮时,你需要添加一个回调。基本上,对于一个媒体路由器回调它告诉一个onRouteSelected。当有人点击Cast图标时,你会得到一个设备列表,然后他们选择一个。他们说,我想去客厅。那是你会得到这个onRouteSelected回叫的地方。下面是关于代码的更多细节。所以onResume。这就是前景。当那个活动加载或者当手机前台时,你会想在mediaRouterCallback中添加回调有一个onRouteSelected告诉你特定的设备已经被选择,然后从它的bundle中你可以获得关于它是哪个设备的信息。 Be it your living room, your family room, your office, which ever device it is within your household. You’ll use that information about that selected device to connect up the Google API client soon.

下一步你需要做的是创建一个GoogleApiClient你会用一个,有一个选项的构建器- Cast选项-这是所有你想在你的应用中使用的选项。最后你调用connect,这个连接实际上就像打开一个插座,连接到手机和适配器之间的最后一个连接。

接下来要做的是启动应用程序。你已经连接好了,现在你需要启动。为了实现这一点,当你发布时,你会在电视上看到你的应用。这样做你会得到onConnected的回调告诉你连接成功然后从那里从Cast API客户端你会调用launchApplication。当你这样做的时候奇迹就会发生。这时你的应用启动,手机连接。

在Cast app中,我们通常想做的下一件事是处理媒体。我们有一个MediaInfo对象它是表示一段媒体的主类。不管是一首歌还是电影。或者是一幅图像。然后我们有一个RemoteMediaPlayer处理播放。内部发生的事情是使用媒体会话来处理像锁屏和通知这样的事情。

这是一个使用mediaInfo的例子。它有一个构建器,使它非常容易。你可以加载你的mp4,设置它的内容类型,然后类型是缓冲区还是活动,你会构建那个。接下来要做的是load。把加载想象成加载一张DVD。这是,这是我想用来载入这段媒体的API客户端。最后有一个值为真。有人能猜出这是什么吗?当你加载一段媒体时,真实情况是什么?

(观众)这将是一个图像。

一个图像?其他人呢?其他人呢?这是播放。基本上是告诉它,我想加载这个,然后马上播放它,你不希望在暂停状态下开始。你想从刚开始播放的视频开始。还有其他的命令,比如play And seek和requestStatus状态非常重要因为Chromecast的独特之处在于它是multi-cinder的。这意味着如果我们所有人都坐在一起看电影,我们都可以用手机来控制电影内容。或者我们要开一个舞会我们都在控制音乐和播放列表,你想要能够使用,去请求那个状态,这样你就能得到媒体状态,这样你就知道当前的元数据是什么,这样你就能用那个信息更新你的屏幕。

我们发现,我之前看过代码有很多额外的步骤,比如在发射前连接。要做所有的工作有点重,所以我们创建了一个开源库,叫做Cast Companion库。Cast Companion Library提供了各种功能:锁屏,迷你播放器,通过媒体会话提供通知和支持。因此,它为您做了很多繁重的工作,并真正简化了Cast集成。因此,对于与我们合作的大型合作伙伴来说,我们可能有80%左右的Android用户采用这个库。所以我强烈建议你们如果你们想要Cast enable一些东西就去做。

但我们发现的一件事是开源有很多缺陷。在像这样的开源库中——它会引起很多问题。正确的。我们发现,当我们的合作伙伴退出时,他们在GitHub上克隆了这个repo,当他们想做一些改变时,无论是主题还是小的,任何他们想做的小的改变,他们直接修改源代码,而不是子类化。你希望别人如何使用你的图书馆。一年,一年半之后,我们发现所有的合作伙伴都停留在我们图书馆一年或一年半以前的版本上。从那时起,我们已经发布了10多个版本,修复了大量bug,添加了大量功能。所以我们遇到的问题,就像我说的,只是合作伙伴寻找最简单的方法把我想要的行为从你的库中取出来。那就是,你知道,直接改变代码。特别是在Eclipse中工作的方式,这是肯定的。 It was definitely — you didn’t have — before AAR files, we had a lot of problems.

那么我们如何解决这个问题呢?我们在做什么?我们去那里做了什么来尝试解决问题。我们真的很关注JCenter,并考虑在JCenter中发布二进制文件。所以我们没有让我们的合作伙伴去克隆这个项目,这是它的所有源代码,我们给了他们一个二进制文件。所以我们最近做出了这个转变。我对它将要做的事情感到非常兴奋。你知道,我认为它真的鼓励人们去看什么是最小的-做你想要的改变的阻力最小的线,那将是子类化和正确使用你的库。

到目前为止,这是我们的合作伙伴迫切需要的功能。很多人想要它,因为他们不想自己建造它的开销。这就是我们所做的,我认为这不仅简化了合作伙伴,简化了他们需要做的整合工作,还减少并消除了我们曾经遇到的维护问题。很多时候,我和我团队的其他成员不得不坐上飞机,和合作伙伴坐在一起,帮助他们解决最新航班的冲突。我可以告诉你,很多身份里程。通过处理这个问题,我们希望JCenter真的能帮我们解决这个问题,所以我们在2月8日就做到了。几个月前,但到目前为止,一切都很好。

酷。我一直在讲发送方,我一直在讲安卓,现在我们来看看它们是如何一起工作的,我要讲一点接收方。这是在软件狗中运行的代码,在你的电视中运行,或在你的扬声器中运行。

HTML5, JavaScript, CSS。这很简单,对于想做积分的人来说门槛很低。你可以使用所有的工具,你知道ChromeDev工具,你习惯的东西,然后它支持,你知道,EME, Web音频和MSE,媒体源扩展,以及如何工作。

对于Android开发者来说,他们可以使用默认接收器你只需插入一个常量,就可以免费获得接收器,不需要做任何事情。其中一个缺点是它根本不是定制的。它看起来和感觉都不像你的app,下一个东西是样式接收器,它让你提供一个CSS文件。我们有一些人在使用这个,并且非常开心。这里有一些例子。这是我们使用它的示例应用程序。我们做了一些主题,让状态栏变成黄色,进度栏,抱歉,是黄色。你可以用一个图片来定义一个启动画面,你知道,有点像广告新内容。类似这样的事情。

但大多数人做的是一个自定义接收器。这是一个自定义接收器你可以在这里写所有的JavaScript, HTML和CSS。这是最简单的hello world版本。我要讲一下。

因此,首先添加一个cast_receiver.js文件。这是一个包含库的JavaScript文件。然后你需要一个媒体元素这里我有视频标签。然后我要做的是创建一个MediaManager并传递那个media元素给它。最后给它一个强制转换,获取CastReceiverManager的实例并调用start。这就给了你一个hello world接收器它会收听所有的媒体播放。基本上就是播放,暂停,擦洗。所有这些都由CastReceiverManager处理。为你做一切。没有比这更简单的了。 And then there’s lots and lots of callbacks, people joining, people leaving, errors dealing with media player. There’s a lot more, but I don’t want to go through those details today cause we’re here to talk more about Android. But there is a nice sample Custom Receiver on GitHub that most of our partners use. That’s a few thousand lines of code and then you can kind of work with that.

现在我想谈谈调试,这是Chromecast与其他平台相比最强大的套件之一,我认为,从开发人员的角度来看,我们所有的合作伙伴和所有的开发人员都一致认为,我们是这个领域中最简单的工具,也是最好的工具。实现的方法是使用Chrome开发工具。所以我们使用Chrome远程调试来调试。所以你可以坐在你的笔记本电脑上调试你的电视。有人以前用过Chrome远程调试吗?除了Chromecast。别的地方吗?这真的非常非常棒。是的,[…]。那你用它做什么?

(观众)

哦,这不是[…]我想你们两个,就像,在对方后面举手,这非常有趣。是的。

所以对于Android。所以,如果你的网站存在一些只在手机上出现的问题,这对Android来说是很酷的。你知道,我在加入谷歌之前工作的初创公司我们有一些滚动性能问题,只在移动端出现。它们不会在浏览器上显示出来。我们无法再现这些问题,所以我们所做的是使用Chrome远程调试器,通过ADB桥,能够远程调试我们的Android,你知道,Chrome应用程序,我们的Chrome网站,并获得所有的日志,调试,但最重要的是,像滚动性能是日志,所以我们可以输出日志,所有的断点,你可以,你知道,有控制台,改变东西。你可以通过Chrome开发工具和Chrome远程调试得到所有这些。这和我们为Chromecast所做的是一样的。它的外观,感觉和驱动和你写的其他网页应用完全一样。

对于那些不经常做网页开发的人有一个小技巧,有一个调试器命令这是我最喜欢的一个所以我总是把它放在幻灯片里。这基本上是一个手动的断点。我喜欢这样,当我在处理代码时,把调试器放在那里,这样我就可以强制它停止,我不需要连接,在那里得到断点。我希望能够注释掉我想要一个断点的常见地方。所以一定要看看调试器命令,你会喜欢它的。然后是控制台日志,显然还有控制台der,这更像是一个要浏览的对象。这是所有。酷。

在我们结束之前,我讲了很多关于传统演员发展的内容。与Android应用合作,然后有一个基于HTML5的接收器。现在我想指出的一件事是,如果你在做游戏开发,我们有一个叫做远程显示的东西,这对游戏来说真的很好。它的工作方式基本上是在你的手机上创建第二个屏幕。第二种表面视图位于后面,并没有显示,屏幕被镜像到电视上。所以如果你有一个游戏,你经常在一个小时左右的时间里编写,人们可以在Cast上得到它的hello world版本。一般来说,他们会把主屏幕推到后面,然后画一些操纵杆,或者插入陀螺或点击控制,他们可以在创建第二个屏幕时把它建起来,你知道,把第二个屏幕传递到电视上,所以这真的非常简单和快速。

酷。那么你能从这里去哪里呢?我们有哪些资源呢?2022世界杯阿根廷预选赛赛程你可以登录developers.google.com/cast。所有的文档都在那里。设计清单,有一个链接。然后在谷歌,我们强烈建议您使用Stack Overflow。所以如果你对Cast有疑问,那是最好的提问场所。实际上,我们有一个团队,他们的大部分工作就是管理Stack Overflow,确保所有正确的答案都在那里,我们希望能够与他人分享这些信息,所以我们鼓励成为社区的一部分,在那里问你的问题,甚至帮助别人回答他们的问题。最后,我们有一个谷歌+开发者社区,那里有一个链接,那是我们做很多公告的地方,然后你也可以和其他cast开发者分享你做的一些事情。

好了,选角顺利如果大家有什么问题,尽管问。

快速释放,否则死亡