Data Layer API 概览

基于云的节点由 Google 自有的服务器控制
图 1.包含手持式设备和 Wear OS 设备的节点网络示例。

Wearable Data Layer API(Google Play 服务的一部分)可在穿戴式设备(例如智能手表)和已连接的手持设备(通常是智能手机)之间建立通信通道。这是一种在设备之间同步和转移数据的方式。

注意:此 API 仅适用于 Wear OS 手表和配对的 Android 设备。对于与 iOS 手机配对的 Wear OS 手表,在有互联网连接的情况下,应用可以查询其他云端 API。如需详细了解这些其他 API,请访问 Wear OS 上的网络访问和同步

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

常见用例

Data Layer API 对于健身和媒体用例特别有用。

健身应用

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

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

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

媒体应用

如需通过从手表到手机的暂停/继续/开始/结束操作来控制媒体播放器,请使用消息客户端

沟通方式

数据通过以下任一方式进行转移:

  1. 直接:当 Wear OS 设备与其他设备之间建立蓝牙连接时。
  2. 通过可用网络(例如 LTE 或 Wi-Fi)使用 Google 服务器上的网络节点作为中介。

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

蓝牙

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

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

通信的安全性

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

  • 软件包名称必须在各种设备间保持一致。
  • 软件包签名必须在各种设备间保持一致。

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

设置

Wearable Data Layer API 的依赖项如下:

在 Wear 模块的 build.gradle 文件中添加以下依赖项:

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

简化初始配对流程

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

  • 在另一台设备上安装该应用。
  • 在另一部设备上启动该应用。
  • 在另一部设备上启动特定 activity。
  • 启动配套应用。

访问数据层

如需调用 Data Layer API,请使用 Wearable 类获取各种客户端类的实例,例如 DataClientMessageClient

如需了解详情,请参阅 DataLayer 示例

使用最小客户端

如需创建客户端,请参阅以下示例代码:

Kotlin

val dataClient: DataClient = Wearable.getDataClient(context)

Java

DataClient dataClient = Wearable.getDataClient(context);

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

默认情况下,监听器的回调在应用的主界面线程上进行。如需在其他线程上进行回调,请使用 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 参考文档。

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

Wearable API 客户端的创建成本很低,例如 DataClientMessageClient 就是如此。因此,您无需保留客户端,而是可以根据需要使用适合您应用的样式重新创建它们。

客户端状态(例如,一组已注册的监听器)在所有客户端之间共享,并且如果 Google Play 服务在应用运行期间进行了更新,客户端状态会保留。