数据层 API 概览

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

可穿戴设备数据层 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. 通过可用网络传输:使用 Google 服务器上的网络节点作为中介,例如 LTE 或 Wi-Fi。

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

蓝牙

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

云端

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

通信安全

Google Play 服务强制执行以下限制,以提供 Wear OS 设备上安装的应用与附近手持设备上安装的同一应用之间更安全的通信

  • 设备上的软件包名称必须匹配。
  • 设备上的软件包签名必须匹配。

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

设置

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

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

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

促进初始配对过程

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

  • 在其他设备上安装应用。
  • 在其他设备上启动应用。
  • 在其他设备上启动特定 Activity。
  • 启动配套应用。

访问数据层

要调用数据层 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 服务的情况下仍会保留。