Kii BLOG

借助 Android Gear Live 和 Kii 实现物联网可穿戴式 App(第一部分)

智能手表

如何将智能手表连接到云端?

物联网正在改变我们的生活和工作方式,并迅速地成为日常生活的一部分。可穿戴式设备是个不错的例子,所以我们将展示 Kii 是怎样合适 Samsung Gear Live 智能手表物联网方案。这款智能手表装有心率传感器,是市面上最火的健身手表之一。

该演示包括三个不同的终端相互通信:

  • * LG Nexus 4 手机(运行Android KitKat API 19)
  • * Samsung Gear Live 智能手表(运行 Android 4.4W API 20)
  • * Kii 平台(可扩展且安全的云连接后端平台)

手表将心率数据包发送到手机,然后手机再将这些数据发送给 Kii Cloud。要继续,你需要:

也可以使用这种 App 来监测老年人,并在出问题的时候通知其他人(除了监测心率外,亦可以透过加速表以判断是否摔倒)。 

三个端的规则

大多数情况下,当用户使用时,他们并不关心原理,但想要做到无缝的体验并不是一件容易的事情。当然,基础架构是整个物联网最大的挑战之一。它需要满足规模和数据管理需求的变化,运行标准需具备高度的安全性和互操作性。作为 AllSeen Alliance 的成员之一,Kii 提供一个开放的标准、从云端到设备的集成架构,且具有优越的可靠性和安全性。

显然,我们相信我们的云平台可以让物联网的一系列举措顺利运行。Kii 是通过上层 API 按需访问,它既安全又快捷且无需中断服务便可以扩展并支持数百万的设备。另外,开发团队无需管理、维护、安装或升级服务器。

将数据从物联网硬件转移到云端是我们面临的另一个现实的挑战。出于大小或其他设计需求,多数简约的智能设备不设有 Wi-Fi 或网卡。反而,依赖互联网的设备,如智能手机或平板电脑,与云端(如 Kii)交换数据。物联网硬件设备不会直接访问网络,所有的云请求都是由手机或平板电脑完成,例如,用户会喜欢那些可以展示在某一心率范围内的耐力和时间且界面漂亮的 App。

Android Wear

让我们先看看如何通过蓝牙在手机 (Nexus 4) 和智能手表 (Gear Live) 进行低层次的通讯。谷歌提供了一款名为 Android Wear 的 App,该 App 和最新的 Google Play Services 一起便可解决所有使用手表的问题。

双向通信距(Teleporting)传输

谷歌很好地解决了如何在手机和手表间传递数据。但还有一个更简单直接的方法,就是借助上层 API 使用相同的谷歌基础架构:Teleport 库。在设置好手表和智能手机的通信后,便可以使用 Teleport 进行测试。

这里有一个关于 Teleport 是如何工作的简化版本。手机上的 Activity发送消息给手表以启动并接收反馈消息:

代码1

初始化只需要 onCreate() 方法中的一行代码即可。连接和断线由 onStop() 和 onStart() 自动处理的。STARTACTIVITY 消息是由手表的 Teleport 服务接收并用于开启心率监测的。借助对消息任务的扩展,我们可以从手表接收消息(心率值)并在手机本地进行处理(例如使用 Kii 将数据保存到云端)。

我们也在手表上使用 Teleport 发送和接收消息。此外,手表上还需要运行一个基本的常驻后台服务用于接收和处理来自手机的启动 Activity 的消息:

代码2

当手机客户端发送消息要求启动 Activity 时,Teleport 通过 Intent 来启动 Activity。已启动的 Activity 读取心率值并将其发送给手机:

代码3

我们可以创建一种更复杂的协议用于手表和手机间的通信。但是,为了简便起见,在此我们假设所有发自手表的消息都是一个心率值。当手机收到心率值时,我们将会把它发生给 Kii 用于后续的分析(详见下文)。

使用设备 ID 的 PIN 认证

为了让用户更容易在手机上的注册和登录,我们使用4位数的 PIN 码进行认证。按照谷歌推荐的,当 App 第一次运行时,我们将生成一个设备 ID 且该 ID 贯穿整个 App 的安装过程。由于设备 ID 是作为用户名使用的,所以我们可以将 Kii 用户关联到实际设备。只需提供一个4位数的 PIN 码供用户登录。

当你使用类似 Kii.initialize (KII_APP_ID, KII_APP_KEY, Kii.Site.US) 正确初始化 Kii 以后,你便可以在一个 Android 的 AsyncTask 中使用 Kii 的同步 API 执行 PIN 码登录:

代码4

如果 ID 已经存在或在第一次运行时已创建,则可以直接使用。当用户登录或注册完成后,Kii 将为其分配一个访问令牌,所以只要勾选 “记住我” 便无需再次输入 PIN 码。同样的,我们也可以让用户在第一次运行 App 时注册4位数 PIN 码:

代码5

运行一个服用于数据

当 App 与云端通信时,我们可以看看手机是如何从手表请求心率数据的。理想情况下,我们希望在手机上运行一个后台服务用于定期从手表请求心率数据。当使用 Teleport 等待心率数据的同时,DataService 类将通过发送由计时器辅助开启或停止的请求给手表中的心率检测 App 来处理这部分事情。默认情况下,项目会避免使用计时器,需要你通过手机 App 的设置手动请求开启或关闭手表上的心率检测。当你测试自己的 App 时,需要考虑这一步。

由于服务运行在独立的进程中并且在 Manifest 中标记为 Remote,它将使用已存储的访问令牌完成用户登录。你可以把它看成是不同的 App 空间。如果你不在服务中登录用户,则 KiiUser.getCurrentUser() 将返回 null。

设备数据 Kii 平台

与 Kii Cloud 通信是这个演示中最简单的部分。我们创建一个用户级 Bucket 并将心率值存于其内:

代码6

尽管心率数据生成的十分快速,但对于 Kii 存储 API 来说这都不是问题。我们使用一个异步回调来保存每个 Object(如上所示),所有我们可以跟的上数据的速率并防止 App 阻塞。事实上,我们还可以在 Object(可以把它看成是一个 Key/Value 存储)上附加一些其他数据,比如当前的位置坐标。为了简单起见,我们只关注心率值和隐藏信息(物主,创建时间等等)。心率值将由 Kii 进行统计并可以在 developer.kii.com 查看,也可以用于触发警报或者获取分析结果。

演示的源代

你可以从我们的 GitHub 上下载该演示的完整源代码并进行修改或重用。我们期待你的建议和改进。

下期告…

包括本演示的第二部分在内,Kii 还有一些其他作品正在开发中,这些演示将展示如何有效的查看已存储在云端的数据。

  • 使用 Kii Platform Extensions 触发实时响应。例如,当满足某些参数(当创建或修改了一个 Object,或当心率很低时)执行。
  • 使用 push-to-app 通知你的 App,当修改 Bucket 中的数据等新事件发生时。例如,设置一个警告用于检测 Object 的删除事件。
  • 使用 Analytics 在云端分析你的数据,在 Kii 开发者平台上设置分析和可视化规则。

我也正在研究一种方法,以适应那些使用 AllSeen Alliance 推出的名为 AllJoyn 的标准物联网框架的项目。从智能手机到电脑(包括 Raspberry Pi)再到 Arduino 板子,用它的所有设备都可以使用相同的 “语言” 进行通信。

继续关注我们的博客了解详细信息。下回见,祝编码愉快!

发表评论