获取粗略位置

为了尊重用户隐私,建议应用开发者仅请求粗略位置信息权限。需要粗略位置信息权限的应用通常会使用网络位置信息 (FLP),因为它速度快,耗电量更少。

与基于 Android 的移动设备相比,汽车应用中的网络位置信息可能更具挑战性。您可以使用以下两个 Android API:

许多汽车应用都使用 Google Play Services (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(和信号强度)的所需信息。因此,由于我们能够最大限度地减少流量消耗,Google 不会提供 NLP 的其他功能实现。

一体化位置信息提供程序

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

这种方法可以确保最大限度地提升与各行业设备的兼容性,从而尽可能提升应用可用性(没有任何代码差异),以便在需要时获取位置信息。