数据层 API 概述

The cloud-based node is controlled by a Google-owned server
图 1. 手持设备和 Wear OS 设备的节点网络示例。

Wearable Data Layer API(作为 Google Play 服务的一部分)为可穿戴设备(如智能手表)和连接的手持设备(通常是智能手机)之间提供了通信通道。这是一种在设备之间同步和传输数据的途径。

注意:此 API 仅在 Wear OS 手表和配对的 Android 设备上可用。对于与 iOS 手机配对的 Wear OS 手表,应用可以在有互联网连接的情况下查询其他基于云的 API。有关这些其他 API 的更多信息,请访问 Wear OS 上的网络访问和同步

注意:由于数据层 API 是为手持设备和可穿戴设备之间的通信而设计的,因此这些是您用来在这些设备之间建立通信的唯一 API。例如,不要尝试打开低级套接字来创建通信通道。

常见用例

数据层 API 对于健身和媒体用例特别有用。

健身应用

将锻炼数据从 Wear OS 应用发送到移动应用健身应用通常需要将手表捕获的锻炼数据写入移动应用或 Health Connect。如果使用数据层 API 传输数据,请使用 消息客户端 将锻炼数据从 Wear OS 应用发送到移动应用,以便写入 Health Connect。

在家庭锻炼期间将实时数据流式传输到移动设备

一个 常见的家庭锻炼场景 是将心率数据从 Wear OS 设备流式传输到移动设备,并在移动设备的屏幕上向用户显示最新的心率信息。要流式传输此数据,请使用 通道客户端

媒体应用

要通过手表对手机执行暂停/恢复/开始/结束操作来控制媒体播放器,请使用 消息客户端

通信选项

数据以以下方式之一传输

  1. 直接,当 Wear OS 设备与另一台设备之间存在已建立的蓝牙连接时。
  2. 通过可用网络,例如 LTE 或 Wi-Fi,使用 Google 服务器上的网络节点作为中介。

所有数据层客户端都可以通过蓝牙或使用云进行数据交换,具体取决于设备可用的连接。假设使用数据层传输的数据可能在某些时候会使用 Google 拥有的服务器。

蓝牙

当设备使用蓝牙连接时,数据层会使用此连接。设备之间存在一个单一加密通道,使用标准蓝牙加密,由 Google Play 服务管理。

当蓝牙不可用时,数据会自动通过 Google Cloud 路由。所有通过 Google Cloud 传输的数据都经过端到端加密。

通信安全

Google Play 服务实施以下限制,以提供在安装在 Wear OS 设备上的应用和安装在附近手持设备上的同一应用之间更安全的通信。

  • 包名必须在所有设备上匹配。
  • 包的签名必须在所有设备上匹配。

无论连接类型如何,其他应用都无法访问数据。

设置

可穿戴数据层 API 具有以下依赖项

在 Wear 模块的 build.gradle 文件中包含以下依赖项

dependencies {
    ...
    implementation("com.google.android.gms:play-services-wearable:18.2.0")
}

促进初始配对过程

Horologist 在平台 API 之上提供了几个辅助库。它包含一个 数据层库,可帮助在移动设备和 Wear OS 设备之间建立连接。此外,它还提供了方便的 API 来执行以下操作

  • 在另一个设备上安装应用。
  • 在另一个设备上启动应用。
  • 在另一个设备上启动特定活动。
  • 启动配套应用。

访问数据层

要调用数据层 API,请使用 Wearable 类获取各种客户端类的实例,例如 DataClientMessageClient

有关更多信息,请参阅 DataLayer 示例

使用最小客户端

要创建客户端,请参阅以下示例代码

Kotlin

val dataClient: DataClient = Wearable.getDataClient(context)

Java

DataClient dataClient = Wearable.getDataClient(context);

上下文可以是任何有效的 Android 上下文。如果您在 Activity 的范围内使用 API,请使用 Wearable 类的 getDataClient() 方法。这使某些交互显示为对话框,而不是通知,例如,当要求用户更新其 Google Play 服务版本时。

默认情况下,对侦听器的回调是在应用的主 UI 线程上进行的。要让回调在另一个线程上进行,请使用 WearableOptions 对象来指定自定义的 Looper

Kotlin

runBlocking {
    Wearable.getDataClient(context, options)
}

Java

WearableOptions options = new WearableOptions.Builder().setLooper(myLooper).build();
DataClient dataClient = Wearable.getDataClient(context, options);

有关更多信息,请参阅 WearableOptions.Builder 参考。

根据需要重新创建客户端实例

可穿戴 API 客户端(例如 DataClientMessageClient)创建成本低廉。因此,与其保存客户端,不如根据需要使用适合您的应用的风格重新创建它们。

客户端状态(例如注册侦听器的集合)在所有客户端之间共享,并在应用运行时更新 Google Play 服务时会保留。