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 支持更好的跟踪。
我正在使用 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 支持更好的跟踪。