开发 HarmonyOS NEXT 导航SDK 开发指南 专业导航 导航实时数据获取

导航实时数据获取 最后更新时间: 2026年05月29日

在实际驾车导航中,导航SDK会通过AMapNaviListener监听器实时的透出导航信息与数据,可帮助您进行UI的定制化开发,是HUD和智能硬件的解决方案。骑行、步行与驾车一致,同样可以通过AMapNaviListener来获取导航事件与数据。

注册一般导航事件与数据监听(驾车、骑行、步行通用):

naviInstance = AMapNaviFactory.getAMapNaviInstance(getContext().getApplicationContext(), appkey)
naviInstance.addAMapNaviListener({
  // 导航数据数据更新回调
  onNaviInfoUpdate: (naviInfo: INaviInfo) => {
   LogUtil.i('Navi_Demo','naviListener', 'onNaviInfoUpdate: ' + naviInfo.mRouteRemainDis + ' onUpdateNaviInfo curRouteName: ' + naviInfo.mCurRoadName)
  },
  
  // 算路成功回调
  onCalculateRouteSuccess: (routeResult: IAMapCalcRouteResult | null) => {
   console.info('demo 算路成功')
  },
  
  // 开始导航回调
  onStartNavi: (type: number) => {
   console.info('onStartNavi: ' + type)
  }
})

主要导航信息NaviInfo

NaviInfo主要指的是导航信息,比如当前道路名称、距离终点的时间和距离、没有避开的设施信息等。可通过AMapNaviListener中的onNaviInfoUpdate 回调接口更新导航信息。自定义导航视图AMapNaviView,以及导航组件中导航页顶部诱导面板、底部面板的信息,就是主要从该回调获取的。 

/**
 * 导航引导信息回调。
 *
 * @param naviInfo 导航信息类对象。
 * @since 1.0.0
 */
onNaviInfoUpdate?: (naviInfo: INaviInfo) => void

路口放大图

路口放大图包含了显示和隐藏两个回调,又根据放大图类别为实景图还是模型图分为两套,一共4个回调,均位于MessageDispatcher中,仅对驾车有效,如下: 

/**
 * 显示路口放大图(模型图)
 */
public showModeCross(modelCross: AMapModelCross): void {
  this.doShowModeCross(modelCross);
}
/**
 * 显示路口放大图(实景图)
 */
public showCross(cross: AMapNaviCross): void {
  this.doShowCross(cross);
}
/**
 * 隐藏路口放大图(模型图)
 */
public hideModeCross(): void {
  this.doHideModeCross();
}
/**
 * 隐藏路口放大图(实景图)
 */
public hideCross(): void {
  this.doHideCross();
}

车道线

//显示车道线信息
showLaneInfo = (laneInfo: IAMapLaneInfo | null) => {
  this.naviListenerArray.forEach(listener => {
   if (listener.showLaneInfo) {
    listener.showLaneInfo(laneInfo)
   }
  })
}

//隐藏车道线信息
hideLaneInfo = () => {
  this.naviListenerArray.forEach(listener => {
   if (listener.hideLaneInfo) {
    listener.hideLaneInfo()
   }
  })
}

转向图标

导航过程中路口的转向图标信息,可从NaviInfo中获取,NaviInfo的获取上面已经介绍不再赘述,NaviInfo中转向图标相关的接口有2个,一个是直接获取转向图标的bitmap,另一个是获取转向图标类型的枚举值,可用于自定义转向图标的绘制。图标bitmap带有路网信息,更加直观。

转向图标对应NaviInfo中的接口: 

/**
 * 获取转向图标bitmap
 * <p>
 * 此接口可能返回为空,返回空的情况下,请使用 {@link NaviInfo#getIconType()} 来判别转向类型。请优先使用此接口来绘制转向图标。
 * </p>
 * 注意:<font color='red'>该接口仅驾车模式有效</font>
 *
 * @return  转向图标bitmap
 * @since 6.4.0
 */
public getIconBitmap():  image.PixelMap | null {
	return this.iconBitmap;
}

/**
 * 获取导航转向图标类型
 * <p>
 * 注意,当 {@link NaviInfo#getIconBitmap()} 有返回值的时候,请优先使用其返回的Bitmap来绘制转向图标,这样结果更加准确。
 * <p/>
 *
 * @return 导航转向图标类型值。参见{@link com.amap.api.navi.enums.IconType}
 */
public getIconType():  number {
    return this.mIcon;
}

路况信息

路况信息涉及的接口一共有2个,一个主动接口,位于路线类AMapNaviPath中的getTrafficStatuses ,返回的是当前路线的即时路况信息,可用来绘制光柱图。另一个为被动回调,为AMapNaviListener中的onTrafficStatusUpdate,当路线上的路况发生变化时会触发回调。

AMapNaviPath中的主动接口: 

/**
 * 获取当前路线的交通状态
 * <br>
 * 注意:<font color='red'>该接口仅驾车模式有效</font>
 * @return 交通状态对象集合
 * @since 1.0.0
 */
public getTrafficStatuses():  ArrayList<AMapTrafficStatus> | null {
  return this.trafficStatuses;
}

 AMapNaviListener中的被动接口:

/**
 * 当前方路况光柱信息有更新时回调函数。
 * 注意:<font color='red'>该接口仅驾车模式有效</font>
 * @since 1.0.0
 */
onTrafficStatusUpdate?:() => void

注意:为了获取更加实时准确的路况信息,建议设置AMapNaviListener监听,在收到onTrafficStatusUpdate回调后,通过AMapNavi的getNaviPath或getNaviPaths接口拿到最新的路线对象,然后通过路线对象的getTrafficStatuses接口获取实时的路况。  

电子眼信息

电子眼信息包含电子眼的类型、是否限速、经纬度坐标、当前自车位置到电子眼的距离等信息。位于AMapNaviListener中。 

/**
 * 导航过程中的摄像头信息回调函数
 * 注意:<font color='red'>该接口仅驾车模式有效</font>
 * @param infoArray 摄像头对象数组
 * @since 1.0.0
 */

updateCameraInfo?:(infoArray: IAMapNaviCameraInfo[ ] | null) => void

区间测速电子眼信息

区间测速电子眼信息包含了自车位置和区间测速路段的位置关系、一些实时更新的动态信息等。 

/**
 * 导航过程中的区间测速信息回调函数
 * 注意:<font color='red'>该接口仅驾车模式有效</font>
 * @param startCameraInfo  区间测速起点信息
 * @param endCameraInfo    区间测速终点信息
 * @param status           具体类型可参考{@link CarEnterCameraStatus}
 * @since 1.0.0
 */
updateIntervalCameraInfo?:(startCameraInfo: IAMapNaviCameraInfo| null, endCameraInfo: IAMapNaviCameraInfo | null, status: number) => void

服务区和收费站信息

服务区和收费站信息包含了服务区的类型、名称、经纬度坐标、自车位置到服务区的距离,可用于一些自定义的信息展示。 

/**
 * 服务区信息回调函数
 * 注意:<font color='red'>该接口仅驾车模式有效</font>
 * @param infoArray 服务区对象数组
 * @since 1.0.0
 */

onServiceAreaUpdate?:(infoArray: IAMapServiceAreaInfo[ ] | null) => void

返回顶部 示例中心 常见问题 智能客服 公众号
二维码