獨立與非獨立 Wear OS 應用程式

Stay organized with collections Save and categorize content based on your preferences.

預設建議是 Wear OS 應用程式獨立於手機之外運作,因此使用者在沒有 Android 或 iOS 手機的情況下,可以直接在手錶上完成工作。不過,如果您的應用程式需要手機互動才能讓手錶應用程式順利運作,您必須將 Wear OS 應用程式標示為「依附」。

規劃應用程式

您可以使用 Android App Bundle,讓系統自動為同一應用程式資訊中的每個使用者裝置設定產生最佳化的 APK。如此一來,使用者便只能夠下載執行應用程式所需的程式碼和資源。

如要進一步瞭解如何透過 Google Play 商店發布應用程式,請參閱「封裝及發行 Wear OS 應用程式」和「Android App Bundle 入門指南」。

一般來說,Wear OS 應用程式的最低 API 級別為 API 級別 25 (Wear OS 2.0)。目標 API 級別必須是 API 級別 28 以上 (瞭解詳情),建議您將 targetSdkVersion 設為 API 級別 30 (Wear OS 3),以確保您的應用程式在最新的平台版本中運作良好。

如需網路要求和高頻寬網路存取權的相關資訊,請參閱「在 Wear OS 上存取網路和同步處理」。

將應用程式定義為 Wear OS 應用程式

您必須在應用程式的 Android 資訊清單檔案中定義 <uses-feature> 標記。例如,顯示這是手錶應用程式,如以下範例所示:

  <manifest>
  ...
  <uses-feature android:name="android.hardware.type.watch" />
  ...
  </manifest>
  

將應用程式標示為獨立應用程式

Wear OS 應用程式必須在 Android 資訊清單檔案中,將 meta-data 元素 com.google.android.wearable.standalone 設為 truefalse

這個元素會顯示手錶應用程式是否為獨立應用程式,且不需要使用其他裝置也能運作核心功能。在這種情況下,您必須將元素設定設為 true

智慧手錶應用程式可視為下列其中一種:

  • 獨立應用程式:完全獨立的應用程式,不需要手機應用程式以提供核心功能,包括驗證;手機應用程式只會提供選用功能。
  • 非獨立應用程式:依附應用程式,且需要手機應用程式或其他裝置才能使用核心功能 (例如:驗證)。

如果手錶應用程式完全獨立,則會屬於獨立應用程式類別。您必須將此 meta-data 元素的值設為 true,藉此向 Google Play 商店指明該類別:

<application>
...
  <meta-data
    android:name="com.google.android.wearable.standalone"
    android:value="true" />
...
</application>

如果手錶應用程式不是獨立應用程式,請將上述 meta-data 元素的值設為 false。將元素設為 false 即代表該手錶應用程式需要其他裝置,但不會影響應用程式在 Google Play 商店中的宣傳。

注意:即使值為 false,您還是可以在安裝「電話」應用程式前安裝手錶應用程式。因此,如果手錶應用程式偵測到隨附手機缺少必要的電話應用程式,手錶應用程式應提示使用者安裝電話應用程式。

共用的程式碼和資料儲存空間

程式碼可在 Wear OS 應用程式和手機應用程式之間共用。如有需要,你也可以將個別板型規格專用的程式碼放在不同的模組中。

舉例來說,網路的通用程式碼可能位於某個共用的程式庫。

您可以使用標準 Android 儲存空間 API 將資料儲存在本機,就像手機上一樣。舉例來說,您可以使用 SharedPreferences APIRoom 持續性程式庫。

在其他裝置上偵測您的應用程式

您的手錶應用程式可以偵測相對應的手機應用程式是否可用,反之亦然。

手機應用程式或手錶應用程式可以使用 CapabilityClient,向配對裝置宣傳應用程式。能夠以靜態或動態的方式完成。如果應用程式位於使用者的 Wear OS 網路節點 (例如手機、配對手錶或雲端) 中,CapabilityClient 可讓另一個應用程式偵測其是否已安裝。詳情請參閱「廣告功能」一文。

如果您的應用程式無法偵測到另一個應用程式,您可以允許使用者在遠端裝置上開啟 Play 商店資訊。此解決方案適用於需要搭配手機應用程式才能正確運作的手錶應用程式。必備條件是檢查 Play 商店在遠端裝置上的狀態。

請注意,並非所有手機都支援 Play 商店 (例如 iPhone 等)。

本節將說明以下情境的最佳做法:

  • 獨立的手錶應用程式需要手機應用程式
  • 手機應用程式需要獨立的手錶應用程式

前往 GitHub 的範例查看這項功能。如要進一步瞭解下列類別,請參閱「Wear OS API 參考資料」。這個參考資料也會提供 PhoneDeviceType 類別的相關資訊,其中包含 getPhoneDeviceType() 方法,允許 Wear OS 應用程式可以確認隨附手機是否為 Android 或 iOS 裝置。

指定偵測應用程式的功能名稱

請為每種裝置類型 (手錶或手機) 對應的應用程式,在 res/values/wear.xml 檔案中為功能名稱指定專屬字串。

舉例來說,在行動裝置模組中,wear.xml 檔案可能包含以下內容:

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_phone_app</item>
    </string-array>
</resources>

在 Wear OS 模組中,wear.xml 檔案會包含功能名稱的「不同」值,如下所示:

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>verify_remote_example_wear_app</item>
    </string-array>
</resources>

詳情請參閱「廣告功能」一文。

從智慧手錶上偵測應用程式及開啟網址

您的手錶應用程式可以偵測使用者的隨附手機是否有手機應用程式:

  1. 使用 CapabilityClient 檢查手機應用程式是否已安裝在配對手機上。詳情請參閱 GitHub 上的範例
  2. 如果手機未安裝手機應用程式,請使用 PhoneDeviceType.getPhoneDeviceType() 方法檢查手機類型。
  3. 如果傳回 PhoneDeviceType.DEVICE_TYPE_ANDROID,則手機是 Android 手機。請在 Wear OS 裝置上呼叫 RemoteActivityHelper.startRemoteActivity(),以便在手機上開啟應用程式商店。為手機應用程式使用市場 URI (可能與手機 URI 不同)。例如,使用市場 URI,例如:market://details?id=com.example.android.wearable.wear.finddevices
  4. 如果傳回 PhoneDeviceType.DEVICE_TYPE_IOS,表示手機是 iOS 手機 (無法使用 Play 商店)。透過在 Wear 裝置上呼叫 RemoteActivityHelper.startRemoteActivity(),在 iPhone 上開啟 App Store。應用程式的 iTunes 網址可以指定,例如 https://itunes.apple.com/us/app/yourappname。在 iPhone 上透過 Wear OS 無法以程式輔判斷手機應用程式是否已安裝。最佳做法是為使用者提供機制 (例如按鈕),手動觸發開啟 App Store。

請注意,使用上述的 RemoteActivityHelper API,可以指定手錶上任何網址在手機上開啟,而無需使用手機應用程式。

偵測配對手機類型的詳細資料

以下程式碼片段使用 getPhoneDeviceType() 方法查看與手錶配對的手機類型:

Kotlin

var phoneDeviceType: Int = PhoneDeviceType.getPhoneDeviceType(context)

Java

int phoneDeviceType = PhoneDeviceType.getPhoneDeviceType(context);

下列其中一個 getPhoneDeviceType() 方法傳回的值如下:

回傳值 說明
DEVICE_TYPE_ANDROID 隨附手機是一種 Android 裝置。
DEVICE_TYPE_IOS 隨附手機是一種 iOS 裝置。
DEVICE_TYPE_ERROR_UNKNOWN 判定已配對手機的類型時發生錯誤,稍後應另行檢查。

從 Android 手機偵測應用程式

Android 手機會偵測使用者的 Wear OS 裝置是否具備手錶應用程式:

  1. 使用 NodeClient 找出已連結至使用者手機的所有手錶。詳情請參閱 GitHub 上的範例
  2. 使用 CapabilityClient 查看哪些使用者的手錶已安裝您的應用程式。
  3. 如果應用程式並未安裝在使用者的所有手錶上 (比較步驟 1 的結果和步驟 2 的結果),請允許使用者在其餘的 Wear OS 裝置上透過 RemoteActivityHelper.startRemoteActivity() 方法從「電話」開啟 Play 商店。 具體來說,請使用 Wear OS 應用程式的市場 URI (可能與手機應用程式的 URI 不同)。例如,使用市場 URI,例如:market://details?id=com.example.android.wearable.wear.finddevices

與 iPhone 配對的手錶位置資料

如果手錶與 iPhone 配對,開發人員應使用整合式位置預測提供工具 (FLP) 在手錶上取得位置資料。請參閱「在 Wear OS 上偵測位置」。

如果有隨附手機,FLP 會使用隨附手機中的位置資料。

僅取得必要的資料

一般來說,從網際網路取得資料時,您只應該取得必要的資料。否則,可能會產生不必要的延遲、記憶體占用和電池耗損。

當手錶透過藍牙 LE 連線來連接時,取決於手錶,您的應用程式頻寬可能只有每秒 4 KB。因此建議您採取下列步驟:

  • 對於只提供給手機應用程式的其他資料,稽核網路的要求和回應
  • 將網路圖片發布到網路之前,請先縮小圖片

如需使用高頻寬網路,請參閱「高頻寬網路存取權」一文。

其他程式碼範例

WearVerifyRemoteApp 範例進一步示範如何使用本頁涵蓋的 API。