Here Maps Android SDK离线导航:下载地图后无法算路,重启才正常
问题描述
使用Here Maps Android SDK(Navigate Edition)实现离线导航时,成功下载地图数据后调用OfflineRoutingEngine计算路线,出现如下错误:
E/routing-offline: [ERROR] routing-offline - Failed to calculate the route description, error code: 11, routing error: 1
重启应用后可正常算路,且调用mapDownloader.getInstalledRegions()已确认对应区域状态为Installed:
I/CacheUpdateManager: [INFO ] CacheUpdateManager - GetInstalledMapRegions: catalog_handle=0, regions=[{region_id=20127658, status=Installed}]
问题原因
错误码11对应Here SDK的路由数据未就绪状态。mapDownloader.getInstalledRegions()仅能确认地图包已下载完成,但SDK在下载完成后需要后台完成离线路由数据的索引构建、缓存初始化等操作,此时路由引擎尚未完成数据加载,直接发起算路请求就会失败。
解决方案
监听离线路由引擎的就绪状态
不要直接同步初始化OfflineRoutingEngine,改用异步方式获取实例并监听初始化完成事件:OfflineRoutingEngine.getInstanceAsync(new EngineInitCallback<OfflineRoutingEngine>() { @Override public void onEngineInitializationCompleted(OfflineRoutingEngine engine, Error error) { if (error == null) { // 引擎初始化完成,可在此发起路由计算请求 calculateRoute(engine); } else { // 处理初始化失败逻辑 } } });监听地图数据的就绪状态
通过MapLoader注册数据就绪监听器,确保离线地图数据完全加载后再执行路由操作:MapLoader mapLoader = MapLoader.getInstance(); mapLoader.addMapDataReadyListener(new MapDataReadyListener() { @Override public void onMapDataReady() { // 地图数据就绪,初始化路由引擎并算路 initOfflineRoutingEngine(); } @Override public void onMapDataFailed(Error error) { // 处理数据加载失败逻辑 } });临时规避方案(不推荐长期使用)
若暂时无法接入监听机制,可在下载完成后延迟1-2秒再发起路由请求,给SDK留出数据初始化的时间。
内容的提问来源于stack exchange,提问作者user10986164

