有了 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 等高带宽传输网络连接。具体可见以下示例:
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. } } fun requestWifiNetwork() { connectivityManager.requestNetwork( NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(), callback ) }
由于手表的 Wi-Fi 或手机无线装置可能为了节省电池电量而处于关闭状态,因此可能无法瞬间获取网络。如果手表无法连接到网络,则不会调用 NetworkCallback 实例的 onAvailable() 方法。
调用 onAvailable() 后,设备会尝试保持与 Wi-Fi 网络的连接,直到 NetworkCallback 被释放。为了延长电池续航时间,请在不再需要 Wi-Fi 网络时释放回调,如以下示例所示。
connectivityManager.bindProcessToNetwork(null) connectivityManager.unregisterNetworkCallback(callback)
启动 Wi-Fi 设置 activity
请求 Wi-Fi 网络时,如果已配置保存的网络且该网络在覆盖范围之内,系统会尝试连接到该网络。如果没有保存的 Wi-Fi 网络可用,系统将不会调用 NetworkCallback 实例的 onAvailable 回调方法。
如果您使用 Handler 来使网络请求超时,在发生超时后,您可以引导用户添加 Wi-Fi 网络。使用以下 intent 直接将用户发送到用于添加 Wi-Fi 网络的 activity:
val networkSettingsAction = "com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS" val intent = Intent(networkSettingsAction).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } context.startActivity(intent)
如需启动设置 activity,您的应用必须具有 CHANGE_WIFI_STATE 权限。
界面注意事项
如果您的应用需要连接到新的 Wi-Fi 网络以进行高带宽操作,您应根据需要无缝获取并释放此连接。如果没有可用的 Wi-Fi 网络,请说明该功能需要 Wi-Fi,并提供启动 Wi-Fi 设置 activity 的方法。请勿阻止用户访问不需要高带宽网络的应用功能。
电源和数据流量使用注意事项
为了帮助延长电池续航时间并最大限度地减少移动数据流量消耗,请将所有非必要的网络任务(例如分析报告或日志收集)推迟到 Wear OS 设备重新建立蓝牙或 Wi-Fi 连接(而非 LTE 或按流量计费的连接)后再执行。
云消息传递
如需发送通知,请直接使用 Firebase Cloud Messaging (FCM)。
没有专用于 Wear OS 的网络访问 API 或 FCM API。请参阅有关连接到网络和云消息传递的现有文档。
FCM 可与低电耗模式很好地搭配使用,因此我们建议您采用这种方式将通知发送到手表。
当您的 Wear OS 应用运行时,请收集设备的注册令牌,以便通过 FCM 提供消息。然后,当服务器将消息发送到 FCM REST 端点时,添加令牌作为目标的一部分。FCM 会将消息发送到由令牌标识的设备。
FCM 消息采用 JavaScript 对象表示法 (JSON) 格式,可以包含以下两种或其中一种载荷:
- 通知载荷:当手表收到通知载荷时,将直接在通知流中向用户显示相应数据。当用户点按通知时,您的应用会启动。
- 数据载荷:当载荷包含一组自定义键值对时。 该载荷将作为数据传送到您的 Wear OS 应用。
如需了解载荷详情和示例,请参阅消息类型。
默认情况下,通知会从手机应用桥接到手表。如果您安装了独立的 Wear OS 应用和对应的手机应用,可能会重复收到通知。例如,如果手机和手表都收到了通过 FCM 传递的某条通知,这两部设备可能会各自显示该通知。您可以使用桥接 API 防止这种情况。
使用后台服务
为了确保后台任务能够正确执行,必须考虑低电耗模式和应用待机模式。
如果屏幕关闭或进入氛围模式的时间足够长,设备的部分功能可能会进入低电耗模式,并且后台任务可能会延迟一定的时间。之后,如果设备长时间处于静止状态,将进入常规低电耗模式。您可以使用 WorkManager API 来调度请求,您的应用可通过该 API 注册在低电耗模式下安全执行代码。
使用约束条件进行调度
您可以使用约束条件配置请求,以便延长电池续航时间。选择以下一个或多个约束条件,将其添加到您的请求中:
调度需要网络的请求。
指定
NetworkType是CONNECTED还是UNMETERED。UNMETERED适用于大型数据传输,而CONNECTED适用于小型数据传输。在设备充电时调度请求。
在设备处于闲置状态时调度请求。此约束条件非常适合优先级较低的后台工作或同步任务,尤其是在设备充电时。
如需了解详情,请查看 WorkManager 的约束条件对定期工作的影响指南。