為尊重使用者隱私,建議應用程式開發人員只要求概略位置資訊權限。需要概略位置資訊的應用程式通常會使用融合網路位置資訊 (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,而不是直接使用 FLP,因為 FLP 會自動採取明智做法,使用最能滿足位置資訊要求條件/政策的位置資訊供應器 (即電力和準確度)。LocationManager
與行動裝置不同,車輛很少會從一個地點「跳」到另一個地點。在大部分情況下,車輛位置都會在幕後顯示。
網路位置供應商 (NLP)
大多數車輛不會實作必要的電話 API,以取得 Cell ID (和訊號強度) 的必要資訊。因此,我們不會提供其他 NLP 功能實作項目,因為我們會盡量減少資料用量。
整合式位置資訊提供者
除了適當使用網路和 GPS 供應商,行動裝置 FLP 還會融合其他感應器的資訊,進一步提升位置資訊品質。另一方面,Automotive 的 FLP 目前的實作方式會利用上述假設,並一律使用 GPS_PROVIDER 做為基礎來源。這項功能會模糊 GNSS 提供的定位資訊,視需要加入一些誤差,讓定位結果更不準確。舉例來說,向用戶端提供概略位置資訊時。
因此在極少數情況下,第一個位置可能需要較長時間才能開放。舉例來說,車輛或更精確地說,車輛的位置資訊子系統首次使用時,或是在車輛遭拖吊後。
設計應用程式,鎖定行動裝置和車輛用途
如果應用程式的目標是行動裝置和車用裝置,且不需要更高精確度的位置資訊,請android.permission.ACCESS_COARSE_LOCATION 只要求 FLP,並在可用時改用 FLP。或者,您也可以直接使用 GPS_PROVIDER,並採用相同的權限。架構會降低基礎 GNSS 位置的精確度,以符合 API 預期。詳情請參閱「要求位置存取權」中的「準確度」。
此外,這些應用程式必須在資訊清單中,明確將 android.hardware.location.network 功能宣告為選用。例如:
<uses-feature android:name="android.hardware.location.network" android:required="false" />
這種做法有助於提高與各種外型規格裝置的相容性,因此可讓應用程式在各種裝置上提供服務,且在需要取得位置資訊時,不必修改程式碼。