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)及更高版本中,之前只能通过 Google Play 服务 API 访问的 FUSED_PROVIDER 可作为位置信息提供程序供 LocationManager 使用。您可以在 FusedLocationProvider.java 中查看 FLP 的实现。

虽然只获取粗略位置信息权限就可以使用 GPS_PROVIDER,但该框架会人为降低精确度来满足预期。这对于以 Android 手机为目标设备的开发者而言意义不大,因为该框架整体可用性很差,并且获取粗略位置信息的速度较慢。

汽车中的网络位置信息

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

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

许多应用会使用 Google Play Services API 中的 FLP,而不是直接使用 LocationManager,因为 FLP 会自动选择最符合您的请求标准或政策(例如耗电量和精确度)的位置信息提供程序。

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

网络位置信息提供程序 (NLP)

大多数车辆都未实现所需的电话 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" />

这种方法有助于提高与各种规格设备的兼容性,从而尽可能提升应用可用性(没有任何代码差异),以便在需要时获取位置信息。