在獨立裝置上直接透過網路通訊

手錶可以透過 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,包括定期輪詢。

如果需要連線到特定的網路類型,請參閱「讀取網路狀態」。

高頻寬網路存取權

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"));

如要啟動設定活動,應用程式必須具備 CHANGE_WIFI_STATE 權限。

使用者介面考量事項

如果應用程式需要連線到新的 Wi-Fi 網路以進行高頻寬的作業,請確保在啟動 Wi-Fi 設定前,先將需要連線的原因明確告知使用者。請只在需要高頻寬網路時,才要求使用者新增 Wi-Fi 網路。請勿禁止使用者存取不需要高頻寬網路的應用程式功能。

圖 1 顯示了一個音樂應用程式。該應用程式可讓使用者透過低頻寬網路瀏覽音樂,且只在使用者想下載或串流播放音樂時,才需新增 Wi-Fi 網路。

下載音樂

圖 1 下載音樂的音樂應用程式流程。

電源和資料使用注意事項

為延長電池續航力並盡量減少行動數據用量,請將所有非必要的網路工作 (例如分析報告或記錄收集) 延後,直到 Wear OS 裝置重新建立藍牙或 Wi-Fi 連線 (而非 LTE 或計量付費連線) 為止。

雲端通訊

如要傳送通知,請直接使用 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 還是 UNMETEREDUNMETERED 適合傳輸大型資料,而 CONNECTED 適合傳輸小型資料。

  • 在充電時排程要求。

  • 在裝置閒置時排程要求。低優先順序的背景工作或同步處理工作 (特別是當裝置在充電時) 非常適合使用這個限制。

詳情請參閱 WorkManager 的「限制條件對定期工作的影響」指南。