為尊重使用者隱私,建議應用程式開發人員只要求概略位置資訊權限。需要概略位置資訊的應用程式通常會使用融合網路位置資訊 (FLP),因為這種方式速度快且耗電量較少。相較於 Android 行動裝置,車輛應用程式的網路定位可能更具挑戰性。您可以使用兩種 Android API:
LocationManager API 要求您使用
requestLocationUpdates明確識別偏好的位置資訊提供者。Google Play 服務 API 提供更直接的方式,讓您在
FusedLocationProviderClient中使用位置資訊。
許多車輛應用程式會使用 Google Play 服務 API 中的 FLP,而非 LocationManager。FLP 會根據車輛所需的位置資訊要求條件和政策 (電力和準確度),選取最佳位置資訊提供者。
您可以改為明確要求及使用 NETWORK_PROVIDER 和 GPS_PROVIDER 取得精確位置資訊,這會使用 android.permission.ACCESS_FINE_LOCATION 權限。在 Android 12 (API 級別 31) 以上版本中,FUSED_PROVIDER (先前只能透過 Google Play 服務 API 存取) 可做為 LocationManager 的位置資訊提供者。您可以在 FusedLocationProvider.java 中查看 FLP 的實作方式。
雖然可以只使用概略權限權利搭配 GPS_PROVIDER,但架構會人為降低準確度,以符合預期,因此對於以 Android 手機為目標的開發人員來說,這項做法意義不大,因為整體可用性不佳,且通常需要較長時間才能取得概略位置。
車輛中的網路位置
Android 手機 (搭載 Google 行動服務) 使用的NETWORK_PROVIDER會根據附近的行動通信基地台、Wi-Fi 存取點和藍牙 (BT) 信標判斷位置。因此,NETWORK_PROVIDER可能需要數據連線。
車用應用程式的裝置限制有所不同。由於全球導航衛星系統 (GNSS) 通常會開啟,因此不會因耗電量和電池用量增加而受到處罰。因此 IVI 正常運作時間不會受到影響。 我們會盡量減少與伺服器交換的資料。
許多應用程式會使用 Play API 的 FLP,而非直接使用 LocationManager,因為 FLP 會自動選取最佳位置資訊供應商,以符合要求條件或政策,例如電力和準確度。
與行動裝置不同,車輛很少會從一個地點「跳」到另一個地點。在大多數情況下,車輛位置都是已知的。
網路位置供應商 (NLP)
大多數車輛不會實作必要的電話 API,以取得 Cell ID (和訊號強度) 的必要資訊。因此,我們不會提供任何額外的 NLP 功能實作項目,因為我們會盡量減少資料用量。
整合式位置資訊提供者
除了使用網路和 GPS 供應商,行動裝置 FLP 還會融合其他感應器的資訊,以提升定位品質。反之,Automotive FLP 會使用 GPS_PROVIDER 做為基礎來源。這項功能會調整 GNSS 位置,並在用戶端要求概略位置時,加入刻意產生的錯誤,降低準確度。
因此在極少數情況下,第一個位置的空缺時間可能會比平常長。舉例來說,車輛或更精確地說,車輛的位置資訊子系統首次使用時,或是在車輛遭拖吊後。
設計應用程式,鎖定行動裝置和車輛用途
如果應用程式的目標是行動裝置和車用裝置,且不需要更高精確度,請僅要求 android.permission.ACCESS_COARSE_LOCATION,並在可用時改用 FLP。或者,您也可以使用 GPS_PROVIDER,並採用相同的權限。架構會降低基礎 GNSS 位置的精確度,以符合 API 預期。詳情請參閱「要求位置存取權」一文中的「準確度」一節。
此外,這些應用程式必須在資訊清單中,明確將 android.hardware.location.network 功能宣告為選用。例如:
<uses-feature android:name="android.hardware.location.network" android:required="false" />
這種做法有助於提高與各種外型規格裝置的相容性,因此可讓應用程式在各種裝置上都能使用,且在需要取得位置資訊時,不必變更程式碼。