手錶可以透過 Wear OS by Google 直接和網路通訊,不必存取 Android 或 iOS 裝置。請勿使用 Data Layer API 將 Wear OS 應用程式連線至網路。請改為按照本指南中的指示和步驟操作。
網路存取權
Wear OS 應用程式可以發出網路要求。如果手錶已透過藍牙連線到手機,則手錶的網路流量通常都會透過手機進行 Proxy 處理。
如果並無手機,則視手錶硬體而定,系統會選擇使用 Wi-Fi 和行動網路。網路轉換作業由 Wear OS 平台負責處理。
您可以使用 HTTP、TCP 和 UDP 等通訊協定,但無法使用 android.webkit
API (包括
CookieManager
類別)。您可以藉由讀取和寫入要求及回應的標頭來使用 Cookie。
此外,也建議您使用 WorkManager API 進行非同步要求,包括定期輪詢。
如果需要連線到特定的網路類型,請參閱「讀取網路狀態」。
高頻寬網路存取權
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()
後,裝置會先嘗試與 Wi-Fi 網路保持連線,直到釋出 NetworkCallback
為止。如要延長電池續航力,請在不再需要 Wi-Fi 網路時釋出回呼,如下方範例所示。
Kotlin
connectivityManager.bindProcessToNetwork(null) connectivityManager.unregisterNetworkCallback(callback)
Java
connectivityManager.bindProcessToNetwork(null); connectivityManager.unregisterNetworkCallback(callback);
啟動 Wi-Fi 設定活動
要求 Wi-Fi 網路時,如果已設定並儲存網路,若位於網路範圍內,系統會嘗試連線至該網路。如果沒有可用的已儲存 Wi-Fi 網路,系統就不會呼叫 NetworkCallback
例項的 onAvailable()
回呼方法。
如果您使用 Handler
來逾時網路要求,則可以在逾時發生後引導使用者新增 Wi-Fi 網路。請用以下意圖,直接引導使用者前往新增 Wi-Fi 網路的活動:
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"));
如要啟動設定活動,應用程式必須擁有以下權限:android.permission.CHANGE_WIFI_STATE
。
使用者介面考量事項
如果應用程式必須連線到新的 Wi-Fi 網路以進行高頻寬的作業,請確保在啟動 Wi-Fi 設定前,先將需要連線的原因明確告知使用者。請只在需要高頻寬網路時,才要求使用者新增 Wi-Fi 網路。請勿禁止使用者存取不需要高頻寬網路的應用程式功能。
圖 1 顯示了一個音樂應用程式。該應用程式可讓使用者使用低頻寬網路瀏覽音樂,且只在使用者想下載或串流播放音樂時,才需新增 Wi-Fi 網路。

圖 1. 下載音樂的音樂應用程式流程。
雲端通訊
若應用程式想傳送通知,可以直接使用 Firebase 雲端通訊 (FCM)。
Wear OS 並無專用的網路存取或 FCM API。請參閱「連線到網路」及「雲端通訊」等現存的文件。
FCM 可和「打盹」搭配使用,也是傳送通知到手錶時推薦使用的做法。
請在 Wear OS 應用程式執行期間收集裝置註冊權杖,藉此為 FCM 的訊息做好準備。然後在伺服器傳送訊息至 FCM REST 端點時,請把此權杖當做目的地之一。FCM 會傳送訊息到此權杖識別的裝置。
FCM 訊息採用 JavaScript Object Notation (JSON) 格式,可以包含以下兩種或其中一種酬載:
- 通知酬載:當手錶收到通知酬載時,資料會直接在通知訊息串中向使用者顯示。使用者輕觸通知後,您的應用程式就會啟動。
- 資料酬載:具有一組自訂鍵或值組合的酬載。酬載會以資料形式傳送到您的 Wear OS 應用程式。
如果想進一步瞭解酬載和查看範例,請參閱「關於 FCM 訊息」。
根據預設,系統會將通知從手機應用程式橋接到手錶。如果您有獨立的 Wear OS 應用程式和對應的手機應用程式,系統可能會重複發出通知。舉例來說,當手機和手錶同時收到 FCM 發出的某則通知後,兩個裝置可能會各自顯示這則通知。如要避免發生這種情況,可以使用橋接 API。
使用背景服務
為確保背景工作可以正確執行,必須考慮使用「打盹」和「應用程式待命」功能。
當螢幕關閉或進入微光模式達到一定時間後,裝置會進入部分「打盹」模式,背景工作可能會因此延遲一段時間。之後,如果裝置長時間處於閒置狀態,便會進入常規「打盹」模式。使用 WorkManager API 排程要求,讓您的應用程式能夠進行註冊,以在「打盹」模式下安全地執行程式碼。
設定含有限制條件的排程要求
您可以限制設定要求,藉此節省電力。請在您的要求中採用以下一或多種限制:
- 排程需要網路的要求。指定
NetworkType
要採用CONNECTED
還是UNMETERED
限制。UNMETERED
適合傳輸大型資料,而CONNECTED
適合傳輸小型資料。 - 在充電時排程要求。
- 在裝置閒置時排程要求。低優先順序的背景工作或同步處理工作 (特別是當裝置在充電時處理的工作) 非常適合使用這個限制。
請注意,藍牙 LE 等部分低頻寬網路會視為計量付費網路。
詳情請參閱 WorkManager 的「限制條件對定期性作業的影響」指南。