本报道对Google I/O 2015上“Making apps context aware”议程的内容进行概述。在本次议程中,来自Android地理位置和情景团队的工程师Waleed Kadous与Marc Stogaitis介绍了现在的Google应用(如Google Now)中是如何收集情景数据、识别用户情景并以此提供对用户有用的服务,并列出了一些面向其他开发者的建议。
围绕情景进行设计,从底到上分别涉及传感器(硬件)、算法、以及用户交互这三个层面。传感器是情景发现的起点,算法将传感器收集的数据进行分析和理解(如用户在什么位置?用户是在走路吗?用户是在开车吗?),而交互则是最终将“抽象的”情景转化为功能的所在。
下面以几个已经实现的案例介绍基于场景的设计当前的进展情况。这些案例目前已经可以通过情景API(context APIs)来直接使用,包括activity recognition(动作识别)、places(地点)、geofencing(位置范围)、fused location provider等。
用户是在走路还是在跑步,在坐着还是在躺着,是上楼还是下楼,是骑车还是坐车,手机是在用户的屁股口袋里还是在车里座位上还是在家里的桌面上?要实现这样的动作识别有三个步骤:
目前可以识别的动作可以在DetectedActivity中看到,包括:
int IN_VEHICLE
int ON_BICYCLE
int ON_FOOT
int RUNNING
int STILL
int TILTING
int UNKNOWN
int WALKING
相当直观的返回参数,无需多说。事实上除了这些动作之外,现场还演示了另外两种已经可以被识别的动作,分别是深蹲起和仰卧起坐。这个动作识别库肯定还会继续增加壮大。
接下来,识别了动作之后,有什么应用呢?本讲座提供了一个示范:贴身携带免解锁。假设一个场景,用户用完手机后一直把手机揣口袋里走来走去,走了几分钟又拿出手机来,这两次使用手机之间是手机不离身的,因此理论上无需要求用户再次输入解锁密码。有了动作识别,就可以实现这个功能啦。当然,健身数据记录、运动相关的游戏,有了这种动作识别的能力也很有用。
动作识别配合地理位置识别,还可以实现更多其他的效果。Google Now上展示的“我的车停在哪儿了”的功能,就是由“动作识别”和“fused location provider”这两个API的组合实现的。Fused Location也就是地理位置识别,只不过是综合使用了手机的GPS、WiFi、加速度传感器、陀螺仪、以及磁力感应器的数据来判断地理位置,从而实现了降低能耗又尽可能提升位置识别准确度的效果。
“车停在哪儿了”的功能大致通过三个步骤完成:
据说现在Fused Location数据已经可以精确到2-3米,这样的精确度下找到一辆车是基本没问题的。
以上就是针对情景设计App的一些经验分享。两位分享者也提供了其他的一些思路作为参考,比如在用户驾车的时候自动将短信内容用语音阅读出来,或者是基于地理位置的挖宝游戏设计等。这个就要靠大家发挥自己的想象力了。
接下来,两位分享者提出了三条建议——可以算是针对情景设计的一些“敏感地带”:
关于这种持续收集数据的电量消耗,现在已经有了比较重大的技术突破,原理如下:
传感器本身的耗电很低,大约0.3mW。App进程的耗电量很高,大约100mW。单纯是传感器收集数据,并不会耗很多电;但问题是每次传感器收集数据,都会把数据update给进程,于是进程只能一直醒着,造成电量消耗。那么,就不要如此频繁的吵醒进程就可以了!我们在传感器和进程之间加入一个低功耗的硬件——称之为Hub。这个Hub以高频率从传感器收集数据,然后以低频率向App进程发送batch update(这个跟桌面/服务器OS的节能原理是一样的)。
这样就有一个很happy的结果:80%的能耗降低。
另一方面,能耗方面的控制也仍然需要开发者的人工介入,这主要与该应用所需的数据更新频率和准确度要求有关。这个应用是天气预报类,还是导航类,因此它对位置数据的更新频率与准确度有何要求?这只能由开发者来告知系统。
最后,两位分享者对未来五年的情景设计进行了展望。持续的小改进仍然会源源不断,同时我们也有望看到一些飞越性的改良。这其中可能有三个关键因素:
回顾过去,会感到很多事情是如此的不可思议。10年前的奔腾芯片,100MIPS的能力,15W的功耗,尺寸达到60mm。而上文所提到的Hub硬件,使用的STM32F411芯片,该芯片的能力为125MIPS,功耗最低在0.005W,正常在0.018W,按照目前的电池能力可以连续运转3-10周不等,而尺寸只有3mm。在机器中加入这样一个Hub,就好像人的大脑有了脑干一样,具备了自我维持生命的能力。
继续这样发展下去,会不会有一天,我们能够像幻想世界中的魔法师一样,手中凌空画几道符咒,就能释放了不起的“魔法”呢?还真是一切皆有可能啊。