在独立设备上直接通过网络通信

借助 Wear OS by Google 谷歌,手表可以直接与网络通信,无需 访问 Android 或 iOS 手机。不要使用 Data Layer API 连接到 Wear OS 应用连接到网络。请改为遵循此 指南。

网络访问

Wear OS 应用可以发出网络请求。手表有蓝牙功能时 连接到手机时,手表的网络流量通常通过 手机。

当手机不可用时,会使用 Wi-Fi 和移动网络,具体取决于 手表硬件。Wear OS 平台可处理网络之间的转换。

您可以使用 HTTP、TCP 和 UDP 等协议。不过, android.webkit API(包括 CookieManager 类) 可用。您可以通过读取和写入请求的标头来使用 Cookie, 响应。

WorkManager 用于异步请求,包括定期轮询 。

如果您需要连接到特定网络类型,请参阅读取网络 状态

高带宽网络访问

Wear OS 平台管理网络连接的目标是提供 整体用户体验最佳。该平台选择默认活动网络 平衡了两项需求:长电池寿命和网络带宽。

当优先考虑节省电量时,活跃网络可能 用于传输大型文件或流式传输大型文件等网络任务所需的带宽 媒体。

本部分将指导您使用 ConnectivityManager 类 帮助确保您的应用具备所需的网络带宽。普通 有关精细控制网络资源的信息,请参阅管理 网络使用情况

请求 Wi-Fi 连接

适用于需要高带宽网络访问的用例,例如 大型文件或流媒体,请求高带宽连接 例如 Wi-Fi。具体可见以下示例:

Kotlin

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Java

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

由于手表的 Wi-Fi 或 手机无线装置可能处于关闭状态以节省电量如果手表无法连接到 您的 NetworkCallback 实例的 onAvailable() 方法 调用。

调用 onAvailable() 后,设备会尝试保持与 发布 NetworkCallback 之前的 Wi-Fi 网络。为了延长电池续航时间, 当您不再需要 WLAN 网络。

Kotlin

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Java

connectivityManager.bindProcessToNetwork(null);
connectivityManager.unregisterNetworkCallback(callback);

启动 Wi-Fi 设置 activity

请求 Wi-Fi 网络时,系统会尝试连接到已保存的网络 如果一个已配置且在范围内,则会发生此错误。如果没有保存的 Wi-Fi 网络可用, 系统不会调用 NetworkCallback 实例的 onAvailable 回调方法。

如果您使用 Handler 来使网络请求超时,您可以将 用户在超时发生时添加 Wi-Fi 网络。直接将用户转到 用于使用以下 intent 添加 Wi-Fi 网络的 activity:

Kotlin

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Java

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

如需启动设置 activity,您的应用必须具有 CHANGE_WIFI_STATE 权限。

界面注意事项

如果您的应用需要连接到新的 Wi-Fi 网络以实现高带宽 操作之前,请确保先向用户清楚说明连接原因。 即可启动 Wi-Fi 设置。仅请求用户添加新的 Wi-Fi 网络。不禁止用户执行以下操作: 访问不需要高带宽网络的应用功能。

图 1 显示了一个音乐应用。该应用可让用户浏览 并且仅当出现以下情况时,用户才需要添加新的 Wi-Fi 网络: 下载或在线播放音乐。

音乐下载

图 1. 用于下载音乐的音乐应用流程。

电源和数据流量使用注意事项

为延长电池寿命并尽量减少移动流量消耗, 非必要的网络任务,如分析报告或日志收集; 直到 Wear OS 设备重新建立蓝牙或 Wi-Fi 连接 而不是 LTE 或按流量计费的网络。

云消息传递

如需发送通知,请直接使用 Firebase Cloud Messaging (FCM)

没有专用于 Wear OS 的网络访问 API 或 FCM API。请参考现有的 连接到网络云消息传递文档。

FCM 在低电耗模式下可以顺畅地运行,因此是推荐的通知发送方式 手表。

通过收集设备的注册令牌,通过 FCM 提供消息 Wear OS 应用运行时。然后,将令牌作为目标的一部分包含在内 当服务器将消息发送到 FCM REST 端点时触发。FCM 将消息发送到 令牌标识的设备

FCM 消息采用 JavaScript 对象表示法 (JSON) 格式,可以包含 以下一种或两种载荷:

  • 通知载荷:当 则数据会直接在通知流中向用户显示。时间 当用户点按该通知时,您的应用就会启动。
  • 数据载荷:当载荷包含一组自定义键值对时。 该载荷将作为数据传送到您的 Wear OS 应用。

如需了解载荷详情和示例,请参阅 FCM 消息简介

默认情况下,通知会从手机应用桥接到手表。如果您有 独立的 Wear OS 应用和相应的手机应用,重复通知 可能发生的情况例如,来自 FCM 的单条通知,同时 手机和手表,可能会分别在这两部设备上显示。您可以 请使用桥接 API 来防止这种情况。

使用后台服务

为了帮助确保后台任务得到正确执行, (针对低电耗模式和应用待机模式)。

当屏幕关闭或进入氛围模式的时间足够长时,其中一部分 可能会发生低电耗模式,且后台任务可能会延迟一定的时间。 之后,如果设备长时间处于静止状态,将进入常规低电耗模式。 使用 WorkManager API 调度请求,以便您的应用注册 。

使用约束条件进行调度

您可以使用限制条件来配置请求,从而节省电池电量 生活。请选择以下一个或多个要添加到 请求:

  • 调度需要网络的请求。

    指定 NetworkTypeCONNECTED 还是 UNMETEREDUNMETERED 适用于大型数据传输,而 CONNECTED 适用于小型数据传输 传输。

  • 在设备充电时调度请求。

  • 在设备处于闲置状态时调度请求。这对于 优先级较低的后台工作或同步工作,尤其是在 设备正在充电。

如需了解详情,请参阅 WorkManager 的约束条件对 定期工作指南。