用例-使用Bintray JCenter将通用的Google Cast功能引入每个Android应用程序
文摘:
Kevin Nilson / google技术主管兼经理,解决方案工程师,2016年5月:你是否想过扩展你的Android应用程序,以实现多屏幕体验,利用像电视这样的大型显示设备?Google Cast允许您与Google Cast接收器设备(如Chromecast)共享内容。Google Cast Android发送者使用熟悉的Android手机或平板电脑控件来控制大屏幕上应用程序的体验。
在本次演讲中,我们将讨论Android sender应用程序的开发。我们还将介绍一些最佳实践,以使您的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个应用程序。
现在让我们再深入一点代码——技术。你们有些人可能会感到困惑,为什么Kevin说的是Google Cast而不是Chromecast。所以Google Cast是一项技术,而Chromecast只是一个支持Google Cast的加密狗。所以我们有很多扬声器和电视,我们真的希望随着时间的推移,当你买电视或扬声器时,它会有Google Cast。所以我们最近推出了Vizio电视。然后我们有很多来自索尼,JVL的扬声器,很多很多不同的人在生产扬声器。
接下来是Chrome发送器。这就像你的iOS或Android或你的web应用。接收器是在电视中运行的代码。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剧组开发人员,它有点被切断了。有人知道为什么会这样吗?猜测吗?有人知道吗?不。电视上有一种叫做过屏显示器的东西,这是来自过去的旧显示器和旧技术,但它今天仍然在这里。所以我在电视上展示的是,当我写一个简单的网页时,我从电视上得到了开箱即用的体验。所以你需要做的是记住这一点,如果你回想一下你看过的电视节目,你会记得[…]空格通常不在屏幕的两侧或顶部。 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。他们会把自己的web应用,在电视上原封不动地运行。然后你会看到对话,错误信息,诸如此类的东西出现在电视上。对于第二屏幕,无论是Cast还是其他技术,你必须记住的是,用户在进行交互时是在看手机,而不是看电视。
最后一件事是老化。你们还记得以前,老的,在图书馆,在这个屏幕上显示得很好。但今天有人能猜到,哪种电视——今天的现代电视——这是一个大问题吗?猜测吗?有人知道吗?
(观众)液晶显示器。
液晶显示器吗?关闭。
(观众)等离子体。
等离子体。有人说是等离子体。大概有六个人说是等离子体。那么你认为等离子电视需要多长时间才会出现老化问题呢?猜测吗?猜测吗?
[观众]几个小时?
几个小时?其他人呢?
(观众)30分钟。
三十分钟?是的。所以这是一个很小的数。这取决于电视,但有几种型号的电视在10分钟内就会对你的电视造成永久性损坏。所以你需要考虑这个,在你做应用的时候写代码,移动logo。然后确保在你的应用中,如果有人暂停,例如,在10分钟后你继续做别的事情。或者当回放完成时,你正在做一个启动屏幕,在几个图像中旋转。因此,在处理电视领域的问题时,一定要记住老旧,因为现在市面上有很多昂贵的等离子屏幕,它们能提供一些最好的画面。
现在我想谈谈Cast的设计清单。我们所做的其中一件事就是把一个相当广泛的设计清单放在一起。我们想要达到的是当有人进入你的应用时,感觉就像其他应用一样。所以他们不需要学习Cast是如何工作的,他们已经从其他应用中知道了。很多时候,对于Android开发者来说,这是一个小技巧,我在会议上经常遇到,开发者会对我说,Kevin,我不明白为什么我的应用从来没有被Google推荐过。我不明白为什么。我总是问,你对设计清单有什么看法,你真的看过了吗。在谷歌,设计清单对Android的重要性不亚于对苹果和iOS的重要性。苹果有一个模式,他们会拒绝你的应用程序,不让你把它放在商店里,在谷歌,我们相信,最好的应用程序会挤到顶部,我们绝对不会把流量引向那些没有设计的应用程序,你知道,它们不符合用户体验指南。
Android有指导方针,Cast有指导方针,我们对待这些和苹果一样重要,我真的,我真的,鼓励你,如果你想让你的应用被谷歌推荐,一定要出去,看看设计指导方针。多读几遍,确保你是顺从的。我要告诉你的是,所有被推荐的应用都会经过测试。
酷。太棒了。感谢的人。
好吧。它会掉下来。酷。现在我们来讨论Android的Cast SDK。Android的Cast SDK是作为Google Play服务的一部分内置的。正确的。所以Google Play Services是一个庞大的整体项目,它包含了Google内部的所有服务。很好的是,它让用户一直使用最新的版本因为他们有这个包含地图和Cast以及所有其他Android服务的代码。它会掉下来。所以,当你的应用发布时,当你的APK发布到Play Store时,它不会因为添加Cast而变得臃肿,因为所有繁重的工作都在Google Play Services中完成。
Android SDK有一些域对象。一个是代表Google Cast设备的CastDevice,或者是加密狗。然后我们有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应用程序或经常是与媒体合作。我们有一个MediaInfo对象它是代表一段媒体的主类。不管是一首歌还是一部电影。或者是一个图像。然后我们有一个RemoteMediaPlayer处理播放。内部发生的是使用媒体会话来处理锁屏和通知之类的事情。
这是一个使用mediaInfo的例子。它有一个建造者-使它非常容易。你可以加载你的mp4并设置它的内容类型然后键入它是buffer还是live,你会构建那个。接下来要做的就是装载。把加载想象成加载DVD。这是我想要用来加载媒体的API客户端。最后是一个值true。有人能猜出这是什么吗?当你加载一段媒体时,真实的情况是什么?
[观众]它会是一个图像。
一个图像?其他人呢?其他人呢?这就是自动播放。基本上就是告诉它我想要继续加载这个,然后马上播放你不想在暂停状态下开始。你应该从刚开始播放的视频开始。然后你还有其他命令,比如play, seek和requestStatus,状态非常重要,因为Chromecast的独特之处在于它是多cinder的。这意味着如果我们所有人都坐在一起看电影,我们都可以用手机来控制内容。或者我们要开一个舞会我们都在控制音乐和播放列表,你想要能够请求那个状态这样你就能得到一个媒体状态这样你就能知道当前的元数据是什么这样你就能用那个信息更新你的屏幕。
我们发现,我之前看了代码有很多额外的步骤,比如在启动前连接。做所有的工作有点繁重,所以我们创建了一个开源库,叫做Cast Companion库。演员同伴库带来了各种各样的东西:锁屏,一个迷你播放器,它通过媒体会话带来通知和支持。它为你做了很多繁重的工作并且真的简化了Cast集成。所以对于我们的大合作伙伴来说,我们可能有80%的人采用这个库,如果不是更大的话。所以我强烈建议你们如果你们要启用某些东西你们就去做。
但我们发现的一件事是,开源有很多缺陷。在像这样的开源库中,它会导致很多问题。正确的。所以我们发现当我们的合作伙伴签出时,你知道他们在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日就做到了。就在几个月前,但到目前为止,一切都很好。
酷。我一直在讲发送者,我一直在讲Android,现在我们能看到整个东西是如何一起工作的,我要讲一点接收者。这是在加密狗中运行的代码,在你的电视中运行,或者在你的扬声器中运行。
HTML5, JavaScript, CSS。所以它真的很简单,对每个想做积分的人来说门槛很低。你可以使用所有的工具,你知道ChromeDev工具,像那些你习惯的东西然后它支持,你知道,EME, Web Audio和MSE,媒体源扩展,那是如何工作的。
对于安卓开发者来说,他们可以开始有一个默认的接收器你只需要插入一个常量,你可以免费得到那个接收器,你不需要做任何事情。这样做的一个缺点是它根本就不是定制的。它看起来和感觉都不像你的应用,下一个是有样式的接收器,它让你提供一个CSS文件。我们有一些人正在使用这个,并且非常高兴。这里有一些例子。这是我们使用它的示例应用程序。我们做了一些主题化,让状态栏变成黄色,进度栏,抱歉,是黄色。你可以用一个图片来定义一个启动画面,你知道,某种新内容的广告。诸如此类。
但大多数人做的是定制接收器。这是一个自定义接收器你在其中编写所有的JavaScript, HTML和CSS来做这些。这是最简单的hello world版本。我将详细介绍一下。
因此,首先添加一个cast_receiver.js文件。这是一个包含库的JavaScript文件。然后你需要一个媒体元素这里我有一个video标签。然后我做的是创建一个MediaManager并传递一个媒体元素给它。然后最后给它一个类型转换,获取一个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浏览器的笔记本电脑上调试你的电视。以前有人用过Chrome远程调试吗?除了Chromecast。别的地方吗?这真的非常非常棒。是的[…]有。那你用它做什么?
(观众)
哦,不是……我想你们两个,就像,在彼此身后举手一样,这很有趣。是的。
对于Android。这对安卓来说很酷如果你有一个网站有一些问题只出现在手机上。在我加入谷歌之前,我所在的创业公司有一些滚动性能问题,只出现在移动设备上。它们没有显示在浏览器上。我们无法重现这些问题,所以我们所做的是使用Chrome远程调试器,通过ADB桥,能够远程调试我们的Android, Chrome应用,Chrome网站,并获得所有的日志记录,调试,但最重要的是,像滚动性能记录,所以我们可以输出日志,所有断点,你可以,你知道,有控制台和改变东西。所以你可以使用Chrome开发工具和Chrome远程调试。这和我们在Chromecast上做的是一样的。它的外观,感觉和驱动和你在这里编写其他web应用时是一样的。
对于那些不怎么做网络开发的人我有一个小技巧,有一个调试器命令这是我最喜欢的一个所以我总是把它放在幻灯片里。这基本上是一个手动断点。我经常喜欢这样,当我在写代码的时候,把调试器放在那里,这样我就可以强制它停止我就不用连接了,这样就不用在那里设置断点了。我希望能够注释掉我希望使用断点的常见位置。所以一定要检查调试器命令,你会喜欢它的。然后是console log,很明显,还有console der,这更像是一个要浏览的对象。都在这里。酷。
我讲了很多,在我们结束之前,我讲了很多关于传统演员阵容的发展。与Android应用一起工作,然后有一个基于HTML5的接收器。现在我想指出的一点是,如果你在做游戏开发,我们还有一种叫做远程显示的东西这对游戏来说非常棒。它的工作方式基本上是你在手机上创建第二个屏幕。一种位于后面的第二表面视图,不会显示出来,屏幕会镜像到电视上。所以,如果你有一个游戏,你写了一个小时左右,人们可以得到一个hello world版本,它在Cast上运行。基本上,典型的情况是,他们会把主屏幕推到后面,然后画上一些操纵杆,或者插入陀螺仪或点击控制,他们可以在创建第二个屏幕时建立那个,你知道,把第二个屏幕传递到电视上,所以这非常非常简单和快速。
酷。那么接下来你能做什么呢?我们有哪些资源?2022世界杯阿根廷预选赛赛程大家可以登录developers.google.com/cast。所有的文档都在那里。设计清单,这里有一个链接。在谷歌,我们强烈鼓励大家使用Stack Overflow。所以如果你有关于Cast的问题,那真的是最好的地方去问你的问题。事实上,我们有一个团队,他们的大部分工作就是调节Stack Overflow,确保所有正确的答案都在那里,我们希望能够与他人分享这些信息,所以我们鼓励成为社区的一部分,在那里提出你的问题,甚至帮助别人回答他们的问题。最后我们有一个Google Plus开发者社区那里有一个链接那是我们做很多公告的地方然后你也可以和其他剧组开发者分享你做过的一些事情。
好了,祝大家选角愉快,如果有人有任何问题,请随时提问。
