Google I/O 2014 - Android Wear: The developer's perspective - 1503210442
Last updated
Was this helpful?
Last updated
Was this helpful?
视频发布时间
2014年6月26日
视频介绍
Take a developer's tour of the Android Wear platform and Google's new wearable APIs. Learn about our simple and powerful tools for creating apps for Android Wear devices and bringing wearable experiences to your Android apps. We'll walk step-by-step through designing and building a small, contextual app for Android Wear.
视频推介语
暂无,待补充。
翻译
润稿
终审
原始链接
中文字幕
翻译流水号
加入字幕组
任皓
Martin
--
1503210442
AUSTIN ROBISON:好
大家早上好
很高兴这里座无虚席
看上去只有站着的地方了
我们今天非常激动能和你们聊Android Wear
我是Austin Robison
团队的产品经理
JUSTIN KOH: 我是Justin Koh
团队的首席工程师
AUSTIN ROBISON: 非常好
我们已经非常的兴奋
因为感受到了你们在会议的其它部分
中表现的热情
三楼设备所在的那个地方
在我刚才经过时候一直都被大家围着
所以谢谢你们所有的支持
同时真的很激动能说说
关于Android Wear我们所做的
我想首先简要概述
Android Wear是怎么回事
然后我们将深入到一些代码中真正告诉你
如何构建Wear应用
我们都热爱我们的智能手机
他们丰富有趣 他们可以传递消息
这些都是非常引人入胜的体验
但是想象一个我们都会遇到的画面
坐在一起 但我们只盯着自己的手机
而不看身边的人
所以技术是能令人分散注意的
而这就是我们看到的机会
使用Android Wear让这变好
Android Wear只在你需要的时候
提供信息而且只需要看一眼
真的这意味着你可以更好的
和身边的人沟通
和不在你身边的人沟通
如果有一条时间线
下面是我们都经历过的情况
你感到手机在你的口袋中振动 所以你拿出来看
然后你会 好 好的 我收到一些邮件消息
你去查收 接下来的事情你知道的
你花费数几分钟时间
从你身处的世界中分心
的确影响了你正做的事情 但是
要发生的事情不是必须呈现的。
因此使用Android Wear 有了可在手腕上扫视的通知
你每天都可以有更多的交互
更短的时间 更少的从身处的世界分心
同时仍然能让你
获得发生事情的足够多信息
为实现这一新的交互模式
我们创建了全新的UI
现在 那就是按情景排列的卡片的垂直流
对你最重要的信息
在流的顶部
以备你快速浏览和查看
从Android的角度出发 通知完全自动地
让你的通知跨越多设备
它同时拥有Google Now卡片 重要的是
它支持你的第三方内容
就是我们今天要讲的东西
今年年初 我们推出了
一个开发者预览版 让你
得到使用的初步体验 它更像是
带你体验一下手腕的感觉
这让你获取到手机上的通知对象
并且真正能够增强这些对象
让它们附加信息页
能把这些打包到一起放到栈中
能有语音响应
所以我们今天要实现的是
一个SDK 让你更进一步扩展经验的SDK
在那里 使用你习惯并熟悉的Android工具
让你的代码直接运行在
可穿戴设备上
我们要介绍几个API
提供在可穿戴设备和手机间收发数据的功能
也能生成自定义的UI
并通过Intent过滤整合Voice Action
和手机上一样
我们一直与数十家第三方合作伙伴
实战测试这些API
并且我们已经有一些很棒的应用被开发出来
你已经在keynote中见过了其中一些的特色展示
也已经在以前的会议中见过其中一些应用
这里我会更进一步
提供你们一个关于此SDK可能支持
事物的类型的想法
Runtastic是一个健身社交平台
他们的可穿戴整合帮助用户 用手腕来
控制那些会话
所以你可以说OK Google开始跑步
他们会发一个通知到流中
这个流有一个正运行的跑步定时器
使用一中叫做Display Intents的平台新特性
人们可以在这些卡片中显示新UI
这个特性让你可以直接把activity
嵌入到这些卡片中来绘制自己的UI
在这里我们也看到了一块数据
在手机中生成的
是你的跑步路线 可以自动跨设备同步
我们将会深入到如何做到这一点的细节
再比如,Philips Hue
它们连到灯泡
从你的手机改变灯泡的颜色
在三楼有一个展示 真是妙不可言
可能搬到二楼了 抱歉
他们的应用所做的是 当你回到家中
情景卡片被发布到流中
这让你可以控制你的灯光
他们还可以启动全屏Activity
绘制自己的UI 当你控制应用的时候
会有更身临其境的体验
然后再返回到流
需要注意的重点是我们把应用
聚焦于微交互
我们希望用户能进入自己的功能
完成任务 然后尽可能快的
返回到流
如果需要更深层整合的行为
我们希望用户转发回手机
同时我们已经让这些更易于实现
再一个例子 Glympse
这是一个位置分享的社交应用
你可以把自己的位置发送给朋友
在可穿戴设备上 我们可以通过手机发送联系人信息
这样你就需要得到联系人列表
来浏览来发送地理位置
当您安装了Glympse 还可以看到
朋友正向你走来的实时过程
那么让我们再来看看
接下来要讨论的内容中会出现什么
Justin刚刚得到这只可爱的宠物狗
然后我们开发了一个小型幻灯片控制应用
用于展示小狗的一些照片
我们已经有了一个手机和一个可穿戴设备
当我们开始放这个幻灯片时
我们可以发布一个通知到这里的流
当你在左侧滚动ViewPager时
我们在右侧实时更新
幻灯片的标题 以及该幻灯片的编号
当然 我们还有一个动作支持回退
你可以通过轻触第一片
把手机上的幻灯片向前滑动
所以 我们拿他当个遥控器
同时我们使用这些新API
来提供跨越两个设备的无缝体验
让我们研究一下
开发这个应用需要准备什么东西
当我们写手机或平板电脑应用时 通常每个应用有一个APK
但对于Android Wear我们把概念
扩大到跨越所有设备
我们有直接运行在手机上的APK
我们也有直接运行在可穿戴设备上的APK
两者都是你应用的一部分
Google Play服务负责把两者连接到一起
我们将要讨论一套新的API
使你可以在两者之间发送数据
让通信更容易
可穿戴服务包括3套API Data API
Message API和Node API
这些API从两端都可调用
从可穿戴设备上或从手机上
连接中数据对于应用来说是私有的
如果我们先在这里深入 并且观察Node API
这对于研究节点何时进入
或离开连接状态非常有用
当手表和手机之间的配对建立时
例如 当我们进入连接范围内时
我们会被通知
可以在你自己的应用中用这个来了解
何时可穿戴设备的功能在打开和关闭状态切换
我们可能会显示一个图标
表明你已经连接到可穿戴设备
这个API非常简单
仅用来察觉可穿戴设备何时出现
建立在最顶层的是Message API
具有低延迟机制 为了在设备之间
来回发送字节数组
而且它们可以被加以过滤
关于这个Justin将在后面详细解释
在小狗的例子中 当我们轻触流中的卡片时
或轻触后退按钮回退时
我们会调用SendMessage来发送一个简单的控制
到接收该消息的手机
然后移动ViewPager
Data API是可穿戴服务中最大的一块
它是复制型的数据存储
你可以把它想作一个共享缓存
我们可以将数据放入和取出
当数据被在另一边被修改后
我们则注重
设备之间数据的同步
所以你并不需要担心非持续连接的设备
不需要担心当你超过未连接时间的时候
需要做些什么
困难的部分由我们来完成
你们要做的事情就是把数据
从外面放入存储中 并把它拿出来
例如 在小狗的例子中 我们可以
把幻灯片的标题和幻灯片号放入存储中
Google Play服务复制这些数据
到可穿戴设备 在那里
我们可以实时的更新通知
这样就可以来回传送数据了
现在我要把事情交给
Justin一些了
他将带我们一起使用这些API
并真正深入到一些代码中
我知道这是你们非常感兴趣的
交给你了 Justin
JUSTIN KOH 非常感谢 Austin
哇 水喝得有些少了
你们要原谅我
我们只是得到一只小狗而已 但我居然对她过敏了
所以我有点咳嗽
所以如果你看到我要这样 大家赶快把耳朵堵起来
让我们来看看组成应用
的整体构件模块
在左手边 我们看到
我们有个ViewPager 里面有一些Fragment
幻灯片Fragment
当从用户从左到右滑动
我们将更新数据项
将索引从1更新到2
我们把这些放到数据存储中
然后事件将会跨越到可穿戴设备
并且当这发生时 我们会更新通知
所以首先 我们需要下载Android Studio
创建一个新的项目
我已经创建了一个叫做Slide Control的新项目
你会发现Android Studio现在支持多种规格
所有我们昨天讨论过的规格
可穿戴是其中之一
你只需点击这里的复选框
Android Studio会负责打包
APK的可扫视部分 或这个手表APK
到你的手机应用中 这样它就可以在
Play Store上发布了
让我们从建立手机UI开始
如我所说,这个Activity是ViewPager
在其中有几个Fragment
带有背景图像 幻灯片的标题
这些就是组成两个不同的应用程序
的所有文件
再次,在左边,我们已经有用绿色表示的手机APK文件
在右边,我们已经有蓝色的可穿戴APK文件
让我们来看看显示Activity
就是ViewPager那一个
可以看到 我们需要做的第一件事
是创建一个Google API客户端
这是所有Google Play服务的入口
这里的新API是Wearable API
那么 我要建立我的客户端并在某处放好
这样 我可以在应用的整个生命周期中
使用它
接下来要做的事情是给我的ViewPager接上监听器
当事件发生时 我们可以更新Data Store
具体是创建一个OnPageChangedListener
并调用updateDataItem
让我们来看看数据项
如我们所说 URI在数据API中就是一切
我们这样做 因为创建它们真的很容易
使用现有的Android类解析他们也很容易
所以此例中 我建立一个数据项
将用来管理状态
我正在演示的幻灯片和索引
的标题是什么
我创建这个 /state 路径
在内部 Data API将创建完整的
符合规定的URI wear:// 节点号 状态
现在 你不必和开发者一样担心那么多
你只需要关注路径 等等
但是知道这是URI的格式
以后会有助于你 在另一边重构
这些URI的时候将对你有帮助
数据项是字节数组为基础的
但我们知道 使用字节数组灵活性不高
真正有用的是能够在键值对层面上操作
例如bundle
因此 我们创建了一个键值对对象
叫做Data Map 存储原始类型
和bundle不同 我们不会在里面存储
任何像是Parcelable(一种接口)或者Binder
因为这些项会被发送到
网络上的所有节点
在这种情况下 我创建数据映射
我会把这些基本类型
当前索引 幻灯片的总数
和当前所处幻灯片的标题放进去
最后 我只是把它插入到存储中
它就会同步到所有的连接的节点
在可穿戴设备这边 我们希望能够接收这些数据
我们想要运行一个服务来实现
我们不希望所有的不同的应用
都为了监听一个消息而
持续运行长期服务
所以我们创造了这个抽象类
这个类实现了全部的回调方法
这些回调方法是可穿戴API需要用到的
就是NodeListener,MessageListener和DataListener
我在PresentationListenerService中
子类化了这个
然后把它插到我的Android manifest中
通过这样做 Google Play服务APK
就会为我管理这个服务的生命周期
所以这个服务不会始终运行和消耗资源
宝贵的资源 在可穿戴设备中
让我们过一下PresentationListenerSerivce
你可以看到DataListener接口
有一个方法OnDataChanged
当运行到这里 要去检查路径 因为
在应用中可能有多个消息
我要确保对数据项
做了合适的操作
如果状态 还记得我们把这些组成状态
是数据项的路径
那么 如果它被改变了
我会创建或者更新通知
如果被删除了
我想要的是从流中删除该通知
因为它不再与用户相关
在handleStateChanged中 我们将抽取数据映射
从中得到所有的基本类型数据
然后 我们要发布通知
现在 我知道这里有很多代码
我们一步步地过一遍
我们到底想要做什么
我们希望 当用户触摸了第一张卡片时
把Intent返回到我们的服务
因要做到这一点 就像Android系统
我要创建一个PendingIntent到我们的服务
而且我要在这个intent上使用一个action
以确定用户想要做什么
他们想要向前滑动幻灯片呢 还是想要向后呢
接下来我要做的就是创建一个
NotificationManagerCompat对象 这个对象在支持库中
建立这个基础的通知
就像在手机上建立一个通知一样
我有了标题
我有了文字
而像Austin所说 我们要设置setOngoing
因为这表示一个持续的过程
最后 我们要使用支持库中新的API
增加或扩展我们的通知
所以我要创建一个新的Action
这是用来优先的Action
默认情况下 如果我已经创建了一个内容Intent
对Android Wear上 我们将画一个蓝色的圆圈
但如果你从演示中注意到
我们希望能够只需轻触卡片并优选幻灯片
所以我使用一个drawable和一些文本创建了我在这里的Action
我已经调用了setContentAction
这将把这个Action挂到卡片上
如果你看过Designing for Wearables,
在设计方面的讨论中
我们要让icon为蓝色 这样用户会知道
这是可以触摸卡片
这会是一个指示
当他们看到蓝色的 就知道这是一个可操作的东西
最后 我们扩展我们的建造器
而这将创建一个你看到的通知
现在当然 使用更多的代码可以丰富前面的Action
刚才我们用不同的Action创建不同的Intent
使用Intent上不同的Action
然后在通知上创建了一个不同的Action
作为读完这些代码的奖励
这有一张小狗的照片
在手机这边
我们要去获取一些消息
所以首先 我们必须发送消息
在这种情况下 我们将看到
我正轻触上一张幻灯片的按钮
然后它会回到那里
而这仍然进行在PresentationListenerService中
请记住 当等待处理的intent被启动
它会返回到我们的服务
并检查intent中的什么action来了
同时我只要使用Message API
发送一个控制消息
所以我使用Goolgle API客户端
那里 我已经添加了Wearable API 而我只要发送1个字节
所以要么是0来向前 要么是1来向后
同时我要发送这个给特定的节点 该节点
拥有该数据项
请记住 我可以通过分析数据项的路径得到这个
我要发送这些到它自己指定的路径
我们称之为控制路径
相对在手机这边 我们让ViewPresentationActivity
也实现MessageListener接口
这意味着将实现onMessageReceived接口
因此如果它是一个控制信息时 我们只要取得第一字节
然后决定 要向前滑动幻灯片
还是去上一张幻灯片
当这种情况发生 我们更新ViewPager
我们只需要调用在ViewPager上的setCurrentItem
然后那将引发OnPageChangeListener
这个监听器将更新的数据项同时从所有的分支返回
所以这是个很好的模式
你要确保你的数据项
被你的系统中的某一个节点拥有
在这种情况下 该数据项由手机拥有
我们可以尝试在可穿戴这边编辑
并让数据来回同步
这会有点凌乱
更好的做法是让数据项被节点之一拥有
然后你发送消息来更新它
然后你只要让这个良性循环一圈又一圈的运行
所以我们在这里看到 当我们得到消息
我们将只是回到以前的幻灯片
让我们讨论一下比这个复杂的情况
现在 如果我要给出较长的展示
让通知在流中会更好
我希望我的手表能超时返回到主屏幕
这样我不会太耗电
但如果我给一个更短
更简明的展示
我可能想要控制上层的activity
以便作为一个用户 我可以随意左右滑动
而不用真正考虑我正在做什么
同时为做到这一点 我要创建一个运行在可穿戴设备上
的自定义的activity
让我们来看看这个
在幻灯片上我们可以滑动
我们这里有另一个action称为全屏幕
我轻触它 我要调出可穿戴设备上的
拥有一个ViewPager的activity
并且这些是同步的
所以当我在这里切换
运行在手机上的ViewPager会更新
也有可能有一些
其他的我想要显示的事情 如当前时间
可能当超过时间后 会变红
或者此类的事情
那么让我们来谈谈如何让数据 图像
和标题 跨设备传送到可穿戴设备
我们要使用的数据层
我们要有效地做到这一点
我们可以仅仅不断的更新我们的状态数据项
但是这意味着 每一次一有变化
我们将不得不把所有的数据
一遍又一遍的重复发送
所以相反 我要把我的数据保存在多个数据项中
而且他们都将拥有自己唯一的路径
因此这将是wear://节点ID/索引
如你所见 这里我有三个不同的数据项
相对在可穿戴设备这里
我用它们来为我的activity填充一些卡片fragment
我们将称之为SlideControlActivity
因此让我们看看如何做到这一点
在我们的SlideControlActivity 我们有一个非常简单的layout
就是一个ViewPager
但请记住 我要确保
它不会超时回到主屏幕
我的方法是设置的android:keepScreenOn为true
同样 就像你手机上做的
如果你有某种媒体播放应用
现在 请记住 权力越大责任越大
你要对人们的电池友好些
你不会想要看到这样一种情况
用户可能会意外地
结束了这个全屏activity 同时 它没有有效的
进入休眠状态
因此我们要关注着 用keepScreenOn 你可能
想要跟踪用户的超时
你可能希望它可设置
如果用户和设备间
在一个特定长的时间内没有交互
那就结束你的activity
我们也想把Activity放入到用户的上下文中
所以请记住 用PresentationListenerService
当用户完成查看自己的手机上的幻灯片放映后
我们删除掉通知
类似地 当用户完成查看手机上的幻灯片放映后
如果这个Activity还在运行
我们也想退出它
而最后需要说明的是要关注wakelocks
这对于带有较小电量电池的可穿戴设备非常重要
只是真的要关注到用户的电池容量
好 让我们来看看这里 在SlideControlActivity中
我们已经配置很多
像PresentationListenerService
因此 我们有handleStateChanged方法在这里
我们将提取我们的演示数据
我们只是要设置运行在
可穿戴设备上的ViewPager的索引和
手机上的索引保持一致
我们还希望能够从可穿戴设备控制它
所以我创建另一个OnPageChangedListener
现在我要发送不同类型的消息
不是控制向前和向后的消息
我要发送一个新类型的
叫slide的在不同路径上的消息
这里的字节将只是表示
我想要的目标索引是多少
回到手机这边的ViewPresentaionActivity中
如果我看到从sldie路径上进来的消息
我会要从字节中解析出
然后发送它到那
再一次 我会触发OnPageChangedListener
这将触发Update Item 一切自然进行
良性循环
在这里 我们看到的结果
在那里
所以在默认情况下 Android Wear Activity
可以用左向右滑动来消除
这甚至对于ViewPager也起作用
如果我们多滑动几次然后滑动回来
所有事情如你所期望的那样发生
当我在第一张幻灯片 如果我从左到右滑动
我会消除掉这个activity
但请记住 我正在重要的展示中间
在这里 我不想再操作的时候
有意外产生
因此 如果我们希望重载这个行为的时候
这是绝对有可能
而且可以不需要一行Java代码就能实现
它只是更新style和你的Androidmanifest
所以我们一起来 你在你的应用程序中
创建一个从设备默认Theme
继承的Theme
我们在可穿戴设备上运行的仍是KitKat Adnroid 4.4
因此我们也没有这些material theme
所以我们现在是Theme.DeviceDefault
你绝对会在你的应用中使用这些
我们有一个称为android:windowSwipeToDismiss的新特性
通过把这个特性设置为false
你可以通过滑动Activity来
关闭默认行为
然后我刚把它设置为我的Activity的Theme
现在 我不希望用户被困到我的Activity中无法离开
虽然他们应该知道如何离开的
默认情况下 在所有的Android Wear设备上
可以把你的手掌放在屏幕上来
回到主屏幕 但是这并没有
我们想要做的那样优雅
我们想为这些全屏应用建立一个
方式
我们想出的是一个长按
所以当你长按时 我们要显示出这个红圈
然后如果你轻触它 我们会结束这个Activity
我们已经创建了一个支持类 使你很容易在你自己的应用
中做到这一点
所以我要更新我的布局
我要去创造一个DismissOverlayView这样
只悬在顶层的类
并且它默认会被隐藏
在SlideControlActivity中
我只需要得到那个覆盖视图的引用
然后用GestureDetector
我也可以使用长点击listener
如果有个不同类型的视图
但对于ViewPager 使用GestureDetector更加容易
所以再一次的 就像在手机上一样我创建了一个GestureDetector
我要把动作事件填充进去
当我长按的时候我显示出我的DismissOverlayView
DismissOverlayView负责管理其余的一切
当用户轻触它之后 它退出activity
然后返回到流中
我们要谈的最后一件事
是Assets 把图片数据转移到可穿戴设备
很明显 这就是我们想要做的
为我们的用户创建这些丰富的 精彩的体验
所以我们所做的每一件事情都
关注效率 电池续航效率 等等
所以假设我有一个使用联系人照片应用
这是一个很常见的用例
并假设其他人想要
使用相同的联系人图片
好了 我们不希望要传输图片的多个副本
因此通过将这些Asset放入到我们的数据层
我们将进行一次哈希运算 并只发送一个副本过来
现在在连接的另一边
这些应用并不真的知道其他应用正在使用
相同的Asset
他们只是把它当成自己的私有副本
所以这一切都很安全
这一切都在那里
这很棒
我们要在我们的小狗应用中使用这些Assets
尽管我自己也想不到其他还有谁会想用我的小狗图片
我们不想要传送完全分辨率的图片
无论如何
Nexus 5的分辨率比可穿戴设备上
的要高得多
所以我将会想要确保
发送更小的设备上显示所
必需的图像数据
因此为达这个目的 我们进入ViewPresentationActivity
在这里我们将为我们展示中的
所有幻灯片调用这个函数
我可能会在加载的时候
异步完成这个任务
我会在一个已知的URI创建我的数据项
所以这里是 slide/索引号
我要把标题放入
现在我要创建一个asset
我所有的幻灯片对象都知道如何创建
自己的小尺寸版本 就是一个字节数组
从那里 我把对象发送到Asset.createFromBytes
并且把它放入映射中
然后它会智能地发送到
可穿戴设备
在可穿戴设备边的SlideControlActivity中
我要再次使用异步任务 或者是一个加载器
来加载它
这里就是路径的重要性所在了
因为我知道 这将是wear://等等
我可以到处发送这些URI 并按次序构造他们
来查询这些数据项
所以在这里我要从数据层
加载不同的数据项目
我要提取这个Asset
并从这些字节中 我要创建一个bitmap
我可以用它来更新我的UI
这就是我们得到的
所以现在我把时间交回给Austin
AUSTIN ROBISON:好的
谢谢 Justin
[掌声]
那么 我们希望这能给你们一个印象
关于这些新的API和这个新的规格使用的可能性
并且对于自己的应用 能引发了出一些想法或者甚至想到新的应用
所以我们非常乐意看到你们去创造
欲了解更多信息 你们可以访问
developer.android.com/wear 下载SDK并从那里开始
这里有一个模拟器
你们可以用您赠品中拿到的设备使用它
你们可以在那里开始
我们也还有更多的关于这些API的信息
以I/O字节的方式提供
这些现在都上传到YouTube
你们可以去找来看看
这样 感谢你们 同时我们会答复问题
有麦克风就在过道这里
谢谢
[掌声]
请说
听众:你提到的可穿戴设备有赖于
Google Play服务
那么这是否意味着我们无法连接
到Kindle和其他的类似设备
AUSTIN ROBISON:连接由Google Play服务驱动
因此 我们兼容于任何
运行4.3或更高版本的装有Play Store的Android设备
听众:谢谢
AUSTIN ROBISON:这一边
观众:你好
是否有可能放着你的自定义Activity不管
后让该设备进入睡眠状态
或者 当wakelock被释放的时候 是否能自动退出到主屏幕
JUSTIN KOH:这将自动超时
30秒后回到主屏幕
听众:我明白了
所以没有办法就应用保持开着
假设 你正在做一个演示
你想让它在你说话的时候进入休眠状态
然后你打开 然后要想要再次滑动
JUSTIN KOH:所以这就是你可能会
使用我们在第一部分展示的通知的地方了
听众:哦,明白了
明白了
好的 很好
谢谢
AUSTIN ROBISON: 嗯哼
在这里
听众:你们谈到手表
基本上作为一个遥控器和UI
但当手表提供像陀螺仪
或运动和心跳之类的东西是怎么样的
你是如何处理传感器的
JUSTIN KOH:所以要时刻记得 运行在可穿戴设备上的是Android
所以 你注册一个传感器Listener 针对你想要处理的
传感器类型
然后记住 这些API是可以被
来自连接的两边的设备调用的
所以你可以收集可穿戴设备上的传感器数据
然后将其发送到您运行手机上应用的实例
听众:所以你提到 你可以安装独立的应用
在电话自身上
对不对
那么你如何在应用之间切换
Menu在哪里 如果你愿意的话
或者所有手机上会有的应用列表在哪里
AUSTIN ROBISON: 那么UI实际上是设计成帖子式网格布局
因此是故意设计去掉应用的网格
因此我们鼓励开发人员考虑把
相关卡片放到流中
或者注册Voice Actions
你可以说OK Google 启动应用名称
能够让应用按需求启动
您还可以通过提示卡做到
就是当你在设备上触摸时的触摸菜单
听众:还有一个跟进的问题
是否有预设的语音命令 或者你可以
定义你自己的语音命令么
AUSTIN ROBISON:语音命令是平台的组成部分
所以在developer.android.com
有一些文件 它可以告诉你
如何为可用的Action Intent注册
我们也愿意听到您的建议来
扩展这些Action到其他的短语或其他用例
听众:好的
谢谢
AUSTIN ROBISON: 嗯哼
听众:所以这可能是一个和传感器相关的问题
我可以访问语音时间序列么
JUSTIN KOH:对于什么样的应用
听众:假设我想要记录备忘录
JUSTIN KOH:你会希望确保
设备上的编解码器是可用的
可穿戴设备上的不同种类的
可用的编解码器比你在手机上预期的还多
所以我们做声音处理 实际上是
使用Message API把比特转换为流传到手机上
然后用手机来处理数据
只是为了更有效些
听众:作为一个开发者 我能够做到这一点吗
JUSTIN KOH:是的
所以你可以配置一个声音记录器 获得原始字节并发送
听众:完美
AUSTIN ROBISON: 您还可以 作为语音识别Intent的一部分
如果你只是想记录
让我们做转换来得到返回的字符串
但是如果你想要原始字节 那么你可以得到原始字节
JUSTIN KOH:但是小心编解码器的不同
AUSTIN ROBISON: 请说
观众:你好
所以我的问题是关于你实例化很多这些东西的方式
你在这里展示的触摸Acitivity和传送
这些事情
在我的印象里
通知一般大都在Acitivty之外 对不对
所以你传入的上下文
是否是一个Activity
或者我能否从服务或者一个应用运行它
JUSTIN KOH:它可以从一个服务运行
或者是的 应用程序上下文
事实上 使用该应用的上下文通常是一件好事
听众:OK
因此还有一个问题
也关于bitmap
我的意思是 在我的经验中
处理字节数组往往总是很危险的
特别是用BitmapFactory
除非你正在使用类似Picasa
的东西来为你处理很多bitmap
所以 按照你的建议
你说去启动一个异步任务在后台来处理bitmap
在那里 是否有任何潜在的
你正努力实现提供了的一个实际的框架
以帮助我们的内存管理
相反的我们不得不依靠外部资源
JUSTIN KOH:嗯 在developer.android.com
有一系列的关于
处理大位图的开发文章
例如 使用LRU(Least Recently Used)缓存 等等
这就是我们目前的建议
听众:OK
谢谢
AUSTIN ROBISON: 请说
听众:所以我的问题是关于Glass
Glass似乎独立于所有的可穿戴设备
所以针对Glass和Andorid可穿戴设备
是否需要单独开发
同时GDK Glass SDK 它似乎没有
这些我们刚才看到的能力
那么调和这的计划是什么
AUSTIN ROBISON: 确实
所以Wear团队和Glass团队非常密切的合作
事实上 昨天我们宣布
你可以获取Android Wear通知
所以增加的API会直接显示在Glass上
因此我们绝对完全合作
以确保我们有一组一致的API
贯穿公司的所有可穿戴设备
并且以后还有更多即将到来
听众:好的
所以Android Studio支持可穿戴[听不清]
在不同的规格
是否将也要扩展到Glass
所以有一个APK运行
或者也有支持Glass的组件
JUSTIN KOH:这将是一个项目 多个APK
并在我展示的幻灯片中 有Glass的复选框
听众:好的
太谢谢你了
JUSTIN KOH:我在刚才忘了提了
但是请注意 这些都将要发生 所有的Android项目
你可以创建一个Android库项目来存储共享代码
所以在我的例子中 我有一个演示文稿对象
和一个两边都用的幻灯片对象
我把那放入一个Android库项目中
和从手机项目和从我的可穿戴项目连接彼此
听众:你好 是的
我在想 是否有打算要在未来支持可穿戴设备
连接AndroidTV或Android Auto
或其他一些像这样连接设备的组件
AUSTIN ROBISON: 那么
我刚才谈到的关于Glass的那个通知也将在Android Auto上具有同样的功能
所以我们绝对会思考这个
泛Android的兼容性问题
所以我们现在无疑
和其他团队非常密切的合作
我们正在走向一个真正引人注目的特点
那就是关于未来我们可以告诉你的
JUSTIN KOH:对
我认为重要需要注意的
像我们昨天在keynote中说到
手机就像你的大脑
所以你可以控制你的手机
然后你的手机驱动你的电视
或者驾驶你的爱车
这才是真正把所有东西联系到一起
AUSTIN ROBISON: 请说
听众:我们将能够为IMU硬设置
采样率和灵敏度么
在可穿戴设备上
JUSTIN KOH:对于设备上的什么
听众:IMU
如加速计 陀螺仪和指南针
JUSTIN KOH:您可以使用用于设定更新速率Android API
听众:好 但我的意思是灵敏度本身
由于陀螺仪和加速度计
有内置的不同的灵敏度
并且它们的指示对于不同的运动状态
AUSTIN ROBISON: 如果你能在手机上做到这一点
您可以在可穿戴做到这一点
听众:好的
谢谢
JUSTIN KOH:你能在手机上做到吗
听众:不能
JUSTIN KOH:好的
AUSTIN ROBISON:好的 功能需求
请说
听众:两个小事情
您可以直接在可穿戴设备上请求互联网上的资源么
或者他们都只是经过设备
JUSTIN KOH:我们建议通过数据层传递
那是因为在可穿戴设备上我们不支持完整的
HTP协议栈
观众:我明白了
同时 你能从可穿戴设备得到屏幕开 屏幕关闭的事件么
JUSTIN KOH:你可以
听众:好的
只在manifest或者broadcast接收器
或其他上注册它们就可以了吗
JUSTIN KOH:可以
不过你想要做什么
听起来你试图要做一些事情
听众:是的 我有个想法在酝酿
JUSTIN KOH:好的
听众:后面会让你知道的
JUSTIN KOH:听起来不错
期待着它
AUSTIN ROBISON: 好的
请说
听众:关于测试你有什么建议
Espresso将支持可穿戴设备的自动化测试
或类似的事情么
或者是有什么会出现
JUSTIN KOH:类似于UI自动包之类的
听众:是的 Espresso和相似的东西
JUSTIN KOH:在我们的内部测试中 我们使用uiautomators
所以任何在手机上或平板电脑上可以
工作的相同的任意工具也可以在可穿戴设备上工作
听众:你需要同时拥有手机模拟器
和可穿戴设备运转或只要其中一个
JUSTIN KOH:你的意思 是不是你想建立一个使用手机和
可穿戴设备对话的集成测试环境
观众:[听不清]你们关于测试有什么建议
大概 就是对于那几样东西
AUSTIN ROBISON: 那么有几种不同的方法
你可以用SDK 让你的手机通过USB
连接到您的计算机
这也可以再和穿戴模拟器进行通信
这是一个非常好的测试配置或者
你可以有一个真正的装置然后与之通信
同样可以通过ADB连接
这样所有这些在不同状态的
不同的设备的支持都在SDK中
听众:好吧
谢谢
AUSTIN ROBISON: 请说
听众:你有没有方法把音频流
直接从穿戴设备传到手机上
所以如果我想做一个电话的应用 我能做到这点
JUSTIN KOH:好吧 在我们昨天公布的设备上
是没有扬声器的
所以你只能够说话 但不能得到任何东西
但我想刚才有一个关于如何获取访问原始字节
的较早的问题
听众:是的
但是那不是流媒体
或是可以成为流
JUSTIN KOH:通过[听不清]
我们在应用里用Message API来传输数据流
听众:好的
就是这样
谢谢
AUSTIN ROBISON: 请说
听众:请您多谈一点点
对现有的新的语音命令和
为了申请语音命令的过程
我只是想在网上看看
同时你的语音命令页的其中之一给出了404拒绝访问
AUSTIN ROBISON: 开发者页面
现在正在更新 至少
在我在台上之前
那里有一个页面
将列出所有的平台Intent
我想大概有十几个
在那里 支持从叫车
开始跑步或记笔记的事情
您注册这些和对注册任意其他的Intent是一样的
如果您想请求更多的东西
您可以和你的开发代表说
或者你可以到G+社区
在那里 我们会有一个你可以填写的申请表格来请求
额外的语音操作
所以这是+Android Wear Developers
听众:所以就是将要有
和Glass一样的同一套Vocie Actions
因为他们有自己的声音命令的应用处理
是么 AUSTIN ROBISON: 目前 他们是单独的
听众:好的
谢谢
AUSTIN ROBISON:嗯哼
观众:你好
什么是Android Wear的AOSP(Android Open-Source Project)故事
AUSTIN ROBISON: 你想要回答这个
你知道这个
好吧 我知道那个
好
这样Android Wear的部分是建立在KitKat的顶部的部分
并建立在现有的AOSP部分之上
将是开源的 就像任何其他Android的版本
Google Play服务和我们专有的第一方应用程序
将不会是开源的 它就像手机上的
听众:所以我不能够建立自己的基于AOSP的手机
手表,我说
AUSTIN ROBISON: 正确
听众:谢谢
听众:你好 所以我认为这是伟大的东西
我赞赏的是 谷歌正在考虑
有关把人和他们的设备断开来
这样最起码 他们可以更加人性化
但我的问题是 这些东西还是需要
手机在附近
但是我想知道如果手机不在附近将会发生什么
所以有一种场景是 假设我想要去跑步
我在那一刻不关心接听电话
或其他事情 但如果有朋友短信给我说
嘿 我下一件事可能要迟一些
那么我可能要看到这一点
或者可能要回答说 嘿 好吧
我要再跑远一些 在这种情况下
诸如此类吧
那么这个互动要如何发生
如果现在有空间来做这件事
或者是否有一个对未来的计划
AUSTIN ROBISON: 现在的设备使用蓝牙进行连接
所以当你与你的手机间超出蓝牙范围
那么你会失去连接 但你仍然可以
访问在数据存储中的数据项
例如 你仍然可以做一些动作
通过在装置本身触摸
在未来 我们绝对考虑了
在你的身体上的设备的连接图
所以在未来 我们将扩展这点
我认为这是工业的发展方向
连接性越来越好
这里面有电量的权衡
但它绝对是我们思考的东西
听众:好的
所以就一个问题
我的意思是 你说当超出蓝牙范围时
我们还是可以做一些事情
但无论我怎么做它都不会 我的意思是 如果我
假设发送短信给某人 它实际不会发送
因为它不能连接到电话
JUSTIN KOH: 这是正确的
听众:是的
好的,很棒
谢谢
听众:是的 紧接着HTP协议栈的问题
我知道这基本上是一个Android Wear OEM协议
诸如关于他们必须支持哪些硬件这样的事情
你们将要发布 我们可以期待一个GPS么
我知道心脏率将是在某些设备上有 有些没有
我只是好奇 有哪些特定的硬件是
保证在每一个可穿戴兼容的设备上都有的
AUSTIN ROBISON:在刚开始
具有加速计的IMU包是它的一部分
心脏速率是平台的组成部分
它是可选的
而在未来 我们将缩小范围
并释放出更多的信息
听众:好的
关于GPS 今天你有什么可以提到的么
AUSTIN ROBISON: 不是今天
听众:不是今天
行
谢谢
JUSTIN KOH:好的
最后一个问题 我想
我们得到结束信号了
听众:你要发布小狗应用么
JUSTIN KOH:是的
我要完成它
我想要
听众:这是一个好的开始点
谢谢
JUSTIN KOH:我们也还有足够的例子
像用小狗应用的不同部分
小狗应用类似于把它们绘制到了一起
但我们有一些例子 是我们伟大的团队成员
他们就坐在这里前排中
针对一些我们正在做的不同的事情写的
AUSTIN ROBISON: 好的
最后的最后一个问题
JUSTIN KOH:超级最后问题
听众:你提到在那上面没有扬声器
但我想知道 你们是否已经整合了对讲功能
以便它可以在的确有一个耳机插孔
的设备上工作
AUSTIN ROBISON:不是今天
听众:你们对任意种类的可访问性有计划么
AUSTIN ROBISON: 可访问性是绝对的东西
这对于平台非常重要
我们会在未来的版本改进
听众:好
JUSTIN KOH: 好的
AUSTIN ROBISON: 好的
JUSTIN KOH: 感谢大家
AUSTIN ROBISON:感谢大家
掌声