獨立與非獨立 Wear OS 應用程式的比較

我們建議將 Wear OS 應用程式與手機分開運作,讓使用者不必使用 Android 或 iOS 手機,也能在手錶上完成工作。如果手錶應用程式需要使用手機互動,您必須將 Wear OS 應用程式標示為非獨立應用程式,並採取相應步驟,確保使用者有可用的手機應用程式。

規劃應用程式

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

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

一般來說,Wear OS 應用程式的最低 API 級別為 API 級別 25 (Wear OS 2.0)。目標 API 級別必須為 API 級別 28 以上。詳情請參閱「符合 Google Play 的目標 API 級別規定」。將 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 的值,宣告您的應用程式屬於獨立或非獨立應用程式。

如果您的手錶應用程式是完全的獨立應用程式,請將 com.google.android.wearable.standalone 的值設為 true,向 Google Play 商店表明這一點:

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

如果您的手錶應用程式是非獨立應用程式,且仰賴其他應用程式執行核心功能,請將 com.google.android.wearable.standalone 的值設為 false。這表示手錶應用程式需要使用其他裝置,但不會影響應用程式在 Google Play 商店中的促銷活動。

注意:即使 com.google.android.wearable.standalone 的值為 false,使用者還是可以在安裝手機應用程式前先安裝手錶應用程式。因此,如果您的手錶應用程式如本頁所述,偵測到配對手機缺少必要的手機應用程式,系統會提示使用者安裝手機應用程式。

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

Wear OS 應用程式和手機應用程式可共用程式碼。舉例來說,用於網路的通用程式碼可位於共用程式庫中。

您也可以選擇將特定板型規格專用的程式碼放在個別的模組中。

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

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

您的手錶應用程式和對應的手機應用程式可相互偵測,確認彼此是否為可用的應用程式。

手機和手錶應用程式可以使用 CapabilityClient,對配對裝置宣告自己的狀態,可透過靜態或動態方式進行。

當應用程式位於使用者的 Wear OS 網路節點上 (例如手機、配對手錶或雲端),CapabilityClient 可允取其他應用程式對其進行偵測。詳情請參閱「廣告功能」一文。

如果您的某個應用程式無法偵測到另一個應用程式,您可以提示使用者在受影響的裝置上開啟 Play 商店資訊。 此解決方案適用於需要搭配手機應用程式,才能正常運作的手錶應用程式。

由於部分手機 (例如 iPhone) 並不支援 Play 商店,因此您必須檢查裝置是否支援 Play 商店。

以下章節將說明兩個情境的最佳做法:

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

您也可以前往 GitHub 的範例應用程式查看功能示範。如要進一步瞭解下列章節所述的類別,請參閱 Wear OS API 參考資料。這個參考資料還包含 PhoneTypeHelper 類別的相關資訊,其中的 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 (可能與 Wear 應用程式的 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

    您無法透過 Wear OS,以程式輔助方式判斷 iOS 裝置是否已安裝您的手機應用程式。最佳做法是提供一個機制,讓使用者手動觸發 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_UNKNOWN 配對手機是不明裝置。
DEVICE_TYPE_ERROR 判定已配對手機的類型時發生錯誤,稍後應另行檢查。

從 Android 手機啟動應用程式偵測功能

您的 Android 手機可偵測使用者的 Wear OS 裝置是否安裝您的手錶應用程式。請按照以下步驟操作:

  1. 使用 NodeClient 找出已連結至使用者手機的所有手錶。詳情請參閱 GitHub 上的範例應用程式
  2. 使用 CapabilityClient 查看哪些使用者的手錶已安裝您的應用程式。
  3. 如果您的應用程式並未安裝在使用者的所有手錶上,請使用 RemoteActivityHelper.startRemoteActivity() 方法,讓使用者透過手機上其餘的 Wear OS 裝置開啟 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。