在 Wear OS 上傳送資料並同步處理

Wear OS by Google 可讓手錶透過多種方式傳送及同步處理資料。建議您直接透過網路傳送及同步處理資料,這樣系統就能將應用程式視為獨立的應用程式。

直接透過網路傳送及同步處理資料

建構 Wear OS 應用程式,以便直接與網路通訊。您可以採用和行動開發相同的 API,但請留意 Wear OS 的特定差異。

透過 Wearable Data Layer API 傳送及同步處理資料

Wearable Data Layer API 是 Google Play 服務的一部分,可為應用程式提供選用的通訊管道。

這個 API 僅適用於 Wear OS 手錶和配對的 Android 裝置。Wear OS 手錶與 iOS 手機配對時,在有網際網路連線的情況下,應用程式可以查詢其他雲端式 API。

Wearable Data Layer API 具有下列依附元件:

在 Wear 模組的 build.gradle 檔案中加入下列依附元件:

  dependencies {
    ...
    implementation 'com.google.android.gms:play-services-wearable:18.1.0'
  }
  

我們建議穿戴式應用程式直接透過網路或已連結的手機傳送及同步處理資料。不過,如果您想以 RPC 類型格式在裝置之間直接通訊,或是無法直接連上網路取得資料,可透過下列方式使用 Wearable Data Layer API。

廣播及遠端查詢功能
CapabilityClient 可讓您知道,Wear OS 網路中哪些節點支援哪些自訂應用程式功能。節點代表連線至網路的行動裝置和穿戴式裝置。「功能」是指應用程式在建構期間定義的功能,或是在執行階段動態設定的功能。
舉例來說,某個 Android 行動應用程式可通告其支援遠端影片播放。只要安裝該應用程式的穿戴式版本,就能使用 CapabilityClient 檢查是否已安裝行動版應用程式,並支援該功能。如果是肯定答案,穿戴式應用程式可透過訊息顯示播放/暫停按鈕,讓您控制另一部裝置上的影片。
同樣的,也能讓支援的穿戴式應用程式通告功能,反向操作上述程序。
傳送訊息
MessageClient 可以傳送訊息,且適用於遠端程序呼叫 (RPC),例如透過穿戴式裝置控制手持裝置的媒體播放器,或在穿戴式裝置啟動手持裝置意圖執行的動作。訊息也適合用於單向要求,或要求/回應通訊模型。
如果手持裝置和穿戴式裝置已連線,系統會將訊息排入傳送佇列,並傳回顯示為成功的結果代碼。如果裝置未連線,系統會傳回錯誤。但傳回顯示成功的結果代碼,其實並不表示訊息傳送成功,因為裝置在收到結果代碼後,也可能中斷連線。
傳輸資料
ChannelClient 可以將手持裝置的資料傳輸到穿戴式裝置。您可以透過 ChannelClient 執行以下操作:
  • 使用附加在 DataItem 物件的 Asset 物件時,在未提供自動同步機制、網路也無法使用的狀況下,於多個已連接的裝置間傳輸資料檔案。ChannelClient DataClient 更節省磁碟空間,後者會在與連結的裝置同步處理前,在本機裝置建立資產副本。
  • 使用 MessageClient 穩定傳送因太大而無法傳送的檔案。
  • 傳輸串流資料,例如來自麥克風的語音資料。
同步處理資料
DataClient 會公開 API,讓元件能夠讀取或寫入 DataItemAsset
DataItem 會同步到 Wear OS 網路中的所有裝置。您可以在不連線至任何節點的情況下設定資料項目。節點連線後,系統會同步處理這些資料項目。
資料項目僅屬於建立這些項目的應用程式,且僅供該應用程式在其他節點上存取。通常這應是較小型的項目;如果是傳輸較大型、較具持續性的資料物件 (例如圖片),則會使用 Assets
Wear OS 支援將多部穿戴式裝置連接至同一部手持裝置。舉例來說,如果使用者在手持裝置上儲存了一則記事,使用者的所有 Wear OS 裝置都會自動顯示這則記事。Google 伺服器會在裝置網路中代管雲端節點,便於在裝置間同步處理資料。系統的資料同步對象為直接連線的裝置、雲端節點,以及透過 Wi-Fi 連線至雲端節點的穿戴式裝置。

警告:項目會轉移至所有可用的 Wear OS 裝置,包括尚未安裝您應用程式的裝置。如果同步處理大量資料,請考慮檢查是否已安裝「接收端」應用程式並在線上,以免在手持裝置和 Wear OS 裝置上浪費資源。

監聽重要的資料層事件 (適用於服務)
擴充 WearableListenerService 可讓您監聽服務中的重要資料層事件。系統會管理 WearableListenerService 的生命週期,在需要傳送資料項目或訊息時繫結服務,以及在不需要執行任何操作時解除服務繫結。
監聽重要資料層事件 (適用於前景活動)
在活動中實作 OnDataChangedListener 可讓您在活動於前景運作時監聽重要的資料層事件。使用這個 API 取代 WearableListenerService,可以只在使用者頻繁操作應用程式時監聽變更。

警告:由於這些 API 是專為手持裝置與穿戴式裝置之間進行通訊而設計,因此只有這些 API 可用於設定這類裝置間的通訊。舉例來說,請勿嘗試開啟低階通訊端來建立通訊管道。

用戶端比較

下表列出各用戶端的不同要求和用途。

資料用戶端 訊息用戶端 管道用戶端
資料大小超過 100 kb
可將訊息傳送至目前未連線的節點
通訊模式 共用網路資源 1:1 訊息傳遞 (包含回應) 1:1 串流播放

連線能力

資料層提供兩種通訊選項:

  1. 在手錶已與其他裝置建立藍牙連線時,直接交換資料。
  2. 透過 LTE 或 Wi-Fi 等可用網路交換資料。
圖 1. 手持裝置和穿戴式裝置的節點網路範例。

視裝置可用的連線方式而定,所有資料層用戶端都可以透過藍牙或 Google Cloud Sync 交換資料。無法使用藍牙連線時,可運用雲端同步服務這項 Google 機制,進行穿戴式裝置和手機之間的通訊與資料交換。

安全性

藍牙和雲端同步服務這兩個通訊選項都會經過端對端加密處理。

Google Play 服務會強制執行下列限制,確保手機和手錶之間的通訊安全無虞,且僅為應用程式之間的通訊。

  • 兩部裝置的套件名稱必須一致。
  • 兩部裝置的套件簽名必須一致。

藍牙

當裝置透過藍牙連線時,資料層會使用這個連線方式。使用藍牙時,裝置之間會有一個採用標準藍牙加密機制的加密管道,由 Google Play 服務管理。

雲端

假設透過資料層傳輸的資料可能會在某個時間點使用 Google 自有伺服器。例如,在無法使用藍牙時,DataClientMessageClientChannelClient 會自動透過 Google 的雲端服務轉送資料。所有透過 Google 雲端服務傳輸的資料都會經過端對端加密處理。

產生及儲存金鑰

雲端式通訊的端對端金鑰是由手機產生,也會在兩部裝置透過藍牙連線時,直接與手錶交換。這項作業會在裝置設定期間進行。Google 自有伺服器一律不會接收這些金鑰。

手機必須先產生端對端金鑰,才能透過 Google 自有伺服器進行通訊。金鑰會儲存在所有配對裝置的 Google Play 服務私人檔案儲存空間。

裝置備份

金鑰不會備份,只會儲存在裝置上。如果需要新的金鑰 (例如新手機),系統會產生新金鑰,並提供給使用者仍擁有的所有裝置。