手錶小巧、一目瞭然的板型規格,讓 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()
要求位置更新通知時,您會傳入 LocationCallback
或 PendingIntent
。這兩者都包含位置資訊和 LocationAvailability
狀態。
使用 LocationCallback
選項時,請覆寫 onLocationAvailability()
來接收位置資訊可用性狀態更新。
使用 PendingIntent
選項並傳回 Intent
時,請使用 LocationAvailability.extractLocationAvailability(Intent)
方法,從 Intent
中擷取位置資訊可用性狀態。
處理找不到位置資訊的情況
GPS 訊號遺失時,你可以擷取使用者智慧手錶的最後已知位置。當您無法確認 GPS 位置,或智慧手錶缺少內建 GPS 且與手機中斷連線時,擷取最後已知位置是非常實用的做法。詳情請參閱「取得最後已知位置」一文。
使用批次呼叫清除位置資訊
如果您使用的是批次呼叫,請在螢幕重新開啟或從微光模式返回時呼叫 flushLocations()
,立即將任何批次位置資訊傳回至所有已註冊的 LocationListeners
、LocationCallbacks
和 Pending Intents
。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 持續性活動