在 Wear OS 上偵測位置

手錶小巧、一目瞭然的板型規格,讓 Wear OS 成為一個理想平台,如果您的應用程式會記錄、回報使用者位置資訊並據此做出回應,就很適合使用。舉例來說,您可以建構應用程式,為使用者提供距離、速度和方向的即時更新資訊,或是一目瞭然的周遭環境提示。

詳情請參閱「建構可辨識位置的應用程式」。

部分手錶有內建 GPS 感應器,可擷取位置資料,無需使用連線的手機。在手錶應用程式中要求位置資料時,系統會使用最省電的方法從手機或手錶擷取位置資訊。因此,即使手錶沒有 GPS 感應器,仍然可以取得位置資訊。

為降低位置資料擷取作業對電池續航力的影響,請使用 PRIORITY_BALANCED_POWER_ACCURACY 值呼叫 setPriority()。不同的優先順序設定可能會以不同的方式最佳化方塊

在可行情況下,請以每分鐘不超過 1 次的頻率,使用 setInterval() 要求位置資訊,節省電池電力。

如以下各節所述,當沒有感應器的手錶與手機中斷連線時,應用程式需要處理位置資料的遺失問題

選擇所需方法

您可以透過兩種方式為 Wear OS 應用程式提供位置資料:使用整合式位置預測提供工具 (FLP)Wear 健康照護服務 (WHS)。FLP 是 Google Play 服務 API。

您可在下列情況下使用 FLP:

  • 您需要當下的位置資料,而非連續的位置,例如標記停車車輛的位置。
  • 您希望應用程式持續顯示位置資訊,但不需使用定位記錄。

請在下列情況下使用 WHS:

  • 您需要其他感應器提供的資料,或未來可能需要其他感應器提供的資料。
  • 您的應用程式是健身或運動應用程式,需要在特定時間間隔內追蹤位置資料。

如果是與 iPhone 配對的手錶,請參閱「與 iPhone 配對的手錶位置資料」相關說明。

使用整合式位置預測提供工具

請在手錶上使用 FusedLocationProviderClient 取得位置資料。FLP 可能會使用來自手機的位置資料。詳情請參閱「建立定位服務用戶端」。

如要瞭解如何要求位置更新通知並持續追蹤使用者的位置資訊,請參閱「要求位置更新通知」。

偵測內建的 GPS 功能

如果使用者戴著沒有內建 GPS 感應器的智慧手錶慢跑,也沒有攜帶配對的手機,手錶就無法透過已連結的裝置取得位置資料。請在應用程式中偵測此情況,並警告使用者位置資訊功能無法運作。

如要判斷手錶是否有內建 GPS 感應器,請使用 PackageManager.FEATURE_LOCATION_GPS 呼叫 hasSystemFeature() 方法。以下程式碼會在活動啟動時,偵測智慧手錶是否有內建 GPS 感應器:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.")
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
}

private fun hasGps(): Boolean =
        packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)

Java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.");
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
    ...
}

private boolean hasGps() {
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
}

處理中斷連線的事件

如果手錶沒有內建 GPS 感應器,且與手機連線中斷,手錶的位置資料串流會遺失。如果您的應用程式需要持續收到資料串流,就必須偵測連線是否中斷、警告使用者,並將功能優雅降級。

就像使用行動裝置時一樣,當您使用 FusedLocationProviderClient.requestLocationUpdates() 要求位置更新通知時,您會傳入 LocationCallbackPendingIntent。這兩者都包含位置資訊和 LocationAvailability 狀態。

使用 LocationCallback 選項時,請覆寫 onLocationAvailability() 來接收位置資訊可用性狀態更新。

使用 PendingIntent 選項並傳回 Intent 時,請使用 LocationAvailability.extractLocationAvailability(Intent) 方法,從 Intent 中擷取位置資訊可用性狀態。

處理找不到位置資訊的情況

GPS 訊號遺失時,你可以擷取使用者智慧手錶的最後已知位置。當您無法確認 GPS 位置,或智慧手錶缺少內建 GPS 且與手機中斷連線時,擷取最後已知位置是非常實用的做法。詳情請參閱「取得最後已知位置」一文。

使用批次呼叫清除位置資訊

如果您使用的是批次呼叫,請在螢幕重新開啟或從微光模式返回時呼叫 flushLocations(),立即將任何批次位置資訊傳回至所有已註冊的 LocationListenersLocationCallbacksPending Intents

  • 注意:系統會在 JavaScript 關閉時顯示連結文字
  • 持續性活動