获取粗略位置信息

为尊重用户隐私,我们建议应用开发者仅请求粗略位置信息权限。需要大致粗略位置的应用通常会使用一体化网络位置信息 (FLP),因为这种方式不仅速度快,而且耗电量更少。与基于 Android 的移动设备相比,汽车应用中的网络位置信息可能更具挑战性。您可以使用以下两个 Android API:

许多汽车应用使用 Google Play Services API 中的 FLP,而不是 LocationManager。FLP 根据车辆所需的位置信息请求条件和政策(电源和精确度)选择最佳位置信息提供程序。

您可以选择明确请求并使用 NETWORK_PROVIDER 以及 GPS_PROVIDER 作为精确位置,它们使用 android.permission.ACCESS_FINE_LOCATION 权限。在 Android 12(API 级别 31)及更高版本中,之前只能通过 Google Play Services API 访问的 FUSED_PROVIDER 可作为 LocationManager 的位置信息提供程序。您可以在 FusedLocationProvider.java 中查看 FLP 的实现。

尽管只能在粗略权限权限下使用 GPS_PROVIDER(该框架会人为地降低准确性以满足预期),但对于以 Android 手机为目标平台的开发者而言,意义不大,因为整体可用性很差,并且获取粗略位置的速度通常更慢。

Automotive 中的网络位置

Android 手机(包含 Google 移动服务)上使用的 NETWORK_PROVIDER 根据附近的手机基站、Wi-Fi 接入点和蓝牙 (BT) 信标来确定位置。因此,NETWORK_PROVIDER 可能需要数据连接。

对于汽车应用,设备约束条件各不相同。由于全球导航卫星系统 (GNSS) 通常处于开启状态,因此不会因电量和电池用量增加而造成不利影响。因此,IVI 的正常运行时间不会受到影响。 我们尽量减少与我们的服务器交换的数据。

因此,许多应用都使用 Play API 中的 FLP,而不是直接使用 LocationManager,因为 FLP 会使用最符合位置信息请求条件/政策(即功能和精确度)的位置信息提供程序来自动执行智能操作

与移动设备不同,车辆极少会出现从一个位置“跳”到另一个位置的情况。车辆位置大部分时间在系统内部都是可以追踪的。

网络位置提供程序 (NLP)

大多数车辆都未实现所需的电话 API 来获取关于基站 ID(和信号强度)的所需信息。因此,由于我们最大限度地减少了数据使用量,因此不提供 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" />

这种方法可以确保最大程度地与各行业的设备兼容,从而尽可能提升应用可用性,在需要时获取位置时不会出现代码差异。