HERE SDK Android:PositioningManager 在 3.8 或 3.9 中无法使用 NETWORK_PROVIDER

HERE SDK Android: PositioningManager not working with NETWORK_PROVIDER in 3.8 or 3.9

我正在使用 here-sdk 将现有产品从版本 3.7 更新到 3.8 / 3.9

它通过 android LocationManager.GPS_PROVIDER 提供机载硬件 GPS,但也从外部设备接收位置信息,该信息通过作为网络提供商的位置模拟注入:

this.locationManager.addTestProvider(LocationManager.NETWORK_PROVIDER,
            false, false, false, false, true, true, true,
            Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
this.locationManager.setTestProviderEnabled(LocationManager.NETWORK_PROVIDER, true);
this.locationManager.setTestProviderStatus(LocationManager.NETWORK_PROVIDER, 
            LocationProvider.AVAILABLE, null, System.currentTimeMillis());

此外部数据主要在 gps 不可用时使用,例如。在启动期间。

PositioningManager 启动于:PositioningManager.getInstance().start(PositioningManager.LocationMethod.GPS_NETWORK);

代码库中的其他地方有 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, ...) -> onLocationChanged(Location location) 处理程序,它们会在每个新的模拟位置上触发,另外还有其他处理程序侦听 LocationManager.GPS_PROVIDER,这些处理程序用于硬件 gps 的更新。

还有 PositioningManager onPositionFixChanged() 听众为来自两个提供者的这些相同坐标触发。

在 HERE SDK 3.7 上,这一切都完美无缺。

将 HERE SDK 升级到 3.8 后,网络提供商更新停止工作。
地图显示不再更新,onPositionFixChanged() 侦听器不再触发模拟网络更新。然而,GPS 更新工作正常。

LocationManager onLocationChanged 侦听器仍然适用于网络,但 PositioningManager 回调无效。

如果我更改模拟提供商以覆盖 LocationManager.GPS_PROVIDER 而不是网络,onPositionFixChanged() 并且地图会正确更新,但是真实的 gps 坐标会丢失。

SDK 3.9 行为相同。

即使将 Positioning Manager 启动更改为不使用 gps,只有网络不起作用,然后我没有从任何一家供应商处获得更新。

切换回 3.7 aar 文件使其再次工作(没有其他代码更改)

如果有帮助,设备是 运行 Android 5.1.1

谢谢!

我仔细研究了这个主题,根本原因在于以下背景的变化:

在 3.7 SDK 中,我们遇到了隧道外推被 "bad" 网络位置破坏的问题 - 在一个简单的测试应用程序中,隧道外推被网络位置中断,声称其准确度为 24M,但可能并非如此.这只是一个例子,但绝对不应该发生。在引入 ion 3.8 的变化中,我们认为 Android HERE We Go 没有这个问题,因为它只在导航期间使用 LocationMethod.GPS,而在所有其他时间使用 LocationMethod.GPS_NETWORK。实施相同的行为意味着通常在隧道中进行更好的导航。

因此,从 3.8 开始,使用外部设备获取位置将不再有效,目前它被视为预期行为。 另一方面,不再需要它,因为 SDK 支持更好的跟踪。