Android Automotive OS 上的粗略位置

为了尊重用户隐私,建议应用开发者仅请求粗略位置权限。需要粗略近似位置的应用通常使用融合网络位置 (FLP),因为它速度快且功耗低。与基于 Android 的移动设备相比,车载应用中的网络位置可能更具挑战性。您可以使用两个 Android API

许多车载应用使用 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)

大多数车辆不实现获取蜂窝 ID(和信号强度)所需信息的必要电话 API。因此,由于我们最大限度地减少数据使用,因此未提供 NLP 的额外功能实现。

融合位置提供程序

移动 FLP 除了根据需要智能地使用网络和 GPS 提供程序外,还会融合来自其他传感器的信息,以进一步提高位置质量。另一方面,当前车载 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" />

这种方法可确保在不同垂直领域设备上的最大兼容性,从而在需要获取位置时无需代码差异即可实现最大应用可用性。