我正在使用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
谢谢!
答案 0 :(得分:0)
我仔细研究了这个主题,根本原因是发生了以下背景变化:
在3.7 SDK中,我们遇到了隧道外推被“不良”网络位置破坏的问题-在一个简单的测试应用中,隧道外推被网络位置声称为24M准确的中断,但可能并非如此。这只是一个例子,但绝对不应该发生。在3.8版引入的更改中,我们认为Android HERE We Go没有此问题,因为它仅在导航期间使用LocationMethod.GPS,而在其他所有时间仅使用LocationMethod.GPS_NETWORK。实施相同的行为意味着通常正在进行更好的隧道导航。
因此,从3.8开始,使用外部设备来获取位置将不起作用,目前,这被认为是预期的行为。 另一方面,由于SDK支持更好的跟踪,因此不再需要。