Wearable Data Layer API(Google Play 服务的一部分)可在穿戴式设备(例如智能手表)与联网手持设备(通常是智能手机)之间提供通信通道。它是一种在设备之间同步和传输数据的方法。
注意:此 API 仅适用于 Wear OS 手表和配对的 Android 设备。对于与 iOS 手机配对的 Wear OS 手表,在有互联网连接的情况下,应用可以查询其他云端 API。如需详细了解这些其他 API,请参阅 Wear OS 上的网络访问和同步。
注意:由于数据层 API 专用于实现手持式设备与穿戴式设备之间的通信,因此您只能使用这些 API 在这些设备之间建立通信。例如,不要尝试打开低级套接字来创建通信通道。
常见用例
Data Layer API 对健身和媒体用例特别有用。
健身应用
将锻炼数据从 Wear OS 应用发送到移动应用 健身应用通常需要将手表捕获的锻炼数据写入移动应用或 Health Connect。如果使用 Data Layer API 传输数据,请使用消息客户端将锻炼数据从 Wear OS 应用发送到移动应用,以便写入 Health Connect。
在家锻炼时将实时数据流式传输到移动设备
常见的居家锻炼场景是将心率数据从 Wear OS 设备流式传输到移动设备,并在用户移动设备的屏幕上显示最新的心率信息。如需流式传输此类数据,请使用渠道客户端。
媒体应用
如需通过手表上的暂停/继续/开始/结束操作控制手机上的媒体播放器,请使用消息客户端。
通信选项
数据会通过以下任一方式传输:
- 直接:在 Wear OS 设备与其他设备之间建立蓝牙连接后。
- 通过可用网络(例如 LTE 或 Wi-Fi),使用 Google 服务器上的网络节点作为中介。
所有数据层客户端都可以使用蓝牙或云端交换数据,具体取决于设备可用的连接。假设使用数据层传输的数据有时可能使用 Google 拥有的服务器。
蓝牙
使用蓝牙连接设备时,数据层会使用此连接。设备之间会建立一个使用标准蓝牙加密机制(由 Google Play 服务管理)的加密通道。
云端
当蓝牙不可用时,数据会自动通过 Google Cloud 进行路由。通过 Google Cloud 传输的所有数据均经过端到端加密。
通信安全
为了在 Wear OS 设备上安装的应用与附近手持设备上安装的同一应用之间提供更安全的通信,Google Play 服务会强制执行以下限制:
- 软件包名称必须在各种设备间保持一致。
- 软件包签名必须在各种设备间保持一致。
无论连接类型如何,任何其他应用都无权访问这些数据。
设置
Wearable Data Layer API 的依赖项如下:
- 最新版本的 Google Play 服务。
- Wear OS 设备或 Wear OS 模拟器。
在 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
类获取各种客户端类的实例,例如 DataClient
和 MessageClient
。
如需了解详情,请参阅 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 客户端(如 DataClient
和 MessageClient
)的创建成本很低。因此,请根据需要使用适合您应用的样式重新创建客户端,而不是保留客户端。
客户端状态(例如,一组已注册的监听器)在所有客户端之间共享,并且如果 Google Play 服务在应用运行期间进行了更新,客户端状态会保留。