Android SDK此处:Android上的PositioningManager无法在3.8或3.9中与NETWORK_PROVIDER一起使用

时间:2018-12-11 00:59:42

标签: android here-api

我正在使用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

谢谢!

1 个答案:

答案 0 :(得分:0)

我仔细研究了这个主题,根本原因是发生了以下背景变化:

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

因此,从3.8开始,使用外部设备来获取位置将不起作用,目前,这被认为是预期的行为。     另一方面,由于SDK支持更好的跟踪,因此不再需要。