为了尊重用户隐私,我们鼓励应用开发者仅请求粗略位置权限。需要大致粗略位置的应用通常使用网络位置信息 (FLP),因为它速度快且功耗低。
与基于 Android 的移动设备相比,汽车应用中的网络位置信息可能更具挑战性。您可以使用两个 Android API
LocationManager API 要求您明确标识首选位置信息提供程序。
Google Play 服务 API 提供了一种更简化的方式,让您可以通过引入融合位置信息提供程序 (FLP) 来使用位置信息。
许多汽车应用使用 Google Play 服务 (GPS) API 中的 FLP 而不是 LM。FLP 根据车辆所需的位置信息请求条件和政策(功耗和准确度)选择最佳位置信息提供程序。
您可以改为选择明确请求和使用 LM 中的 NETWORK_PROVIDER
,以及用于精确定位的 GPS_PROVIDER
,后者使用 android.permission.ACCESS_FINE_LOCATION
权限。在 API 31 中,之前仅可通过 GPS API 访问的 FUSED_PROVIDER
现在作为位置信息提供程序提供给 LM。您可以在 FusedLocationProvider.java
中查看更简单的 FLP 实现。
虽然可以仅使用粗略权限权利来使用 GPS_PROVIDER
,但框架会人为地降低准确度以符合预期,这对以 Android 手机为目标的开发者来说意义不大,因为总体可用性较差,而且通常更难获得粗略位置。
汽车中的网络位置信息
Android 手机(使用 Google 移动服务)上使用的 NETWORK_PROVIDER
已从仅根据附近的蜂窝信号塔确定位置更改为还使用 Wi-Fi 接入点甚至蓝牙 (BT) 信标。使用 NETWORK_PROVIDER
可能需要数据连接。
对于汽车应用,设备限制有所不同。由于 GNSS 通常处于开启状态,因此不会因功耗和电池使用量增加而受到处罚。因此,IVI 正常运行时间不会受到影响。我们努力最大限度地减少与服务器交换的数据。
因此,许多应用使用 Play API 中的 FLP 而不是直接使用 LM,因为 FLP 会自动执行明智的操作,即使用最能够满足位置信息请求条件/政策(即功耗和准确度)的位置信息提供程序。
与移动设备不同,车辆很少出现从一个地方跳到另一个地方的情况。车辆位置在大多数情况下是已知的。
网络位置信息提供程序
大多数车辆未实现所需的电话 API 以获取有关小区 ID(和信号强度)的所需信息。因此,并且由于我们最大限度地减少数据使用量,因此未提供 NLP 的其他功能实现。
融合位置信息提供程序
移动 FLP 除了智能地使用网络和 GPS 提供程序(如果适用)之外,还融合来自其他传感器的信息,以进一步提高位置信息的质量。另一方面,当前 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" />
此方法可确保与跨垂直行业的设备的最大兼容性,并因此在需要时获得位置信息的最大应用可用性,而无需代码差异。