public static interface NaviSession.EventHandler
| 限定符和类型 | 方法和说明 |
|---|---|
void |
onNaviSessionEvent(int event,
java.lang.Object data)
事件触发回调方法,主要用作
NaviSession.init(Context, EventHandler, NaviSessionParams)
函数的第一个参数。 |
void onNaviSessionEvent(int event,
java.lang.Object data)
事件触发回调方法,主要用作
NaviSession.init(Context, EventHandler, NaviSessionParams)
函数的第一个参数。
event - 事件类型 NaviSession.Eventdata - 事件触发后回传的数据对象 NaviSession.EventNaviSession.Event,
NaviSessionData
// -- e.g. 回调实现示例
// 初始化导航引擎参数
NaviSessionParams params = new NaviSessionParams();
// 如果全部使用默认只,那么不需要下面的设置
// 具体设置细节请查看NaviSessionParams,这里仅作简单的示例
// 开启部分可选模块,电子眼播报和放大图,默认全部开启
params.modules = NaviSession.Module.cameraWarning | NaviSession.Module.expandView;
// 设置引擎在算路完成时不自动载入路线,默认为自动载入
params.autoTakeRoute = false;
// 设置放大图默认高宽和字体
params.expandViewWidth = params.expandViewHeight = 512;
params.expandViewSmallFontSize = 22;
params.expandViewBigFontSize = 30;
NaviSession ns = NaviSession.getInstance();
ns.init(context, new NaviSession.EventHandler () {
// 一下是一个典型的回调模版
public void onNaviSessionEvent (int event, Object data) {
switch (event) {
case NaviSession.Event.routeStarted:
Logger.d(TAG, "开始算路");
// TODO: Something else
break;
case NaviSession.Event.rerouteStarted:
Logger.d(TAG, "开始重算路");
// TODO: Something else
break;
case NaviSession.Event.routeComplete:
// 此时data对象返回的是一个RouteCollection对象
// 其内部可能包含多条有效路线
RouteCollection rc = (RouteCollection)data;
if (rc.num > 1) {
// 绘制多条路线,给出路线数组,已经有效路线条数
drawRoutes(rc.routes, rc.num);
} else {
// 在上面的设置中配置了引擎在算完路后不会自动载入路线,所以需要手动的让引擎载入算好的路线
// 载入路线后会收到NaviSession.Event.newRouteTaken消息
ns.takeRoute(rc.routes[0]);
}
break;
case NaviSession.Event.rerouteComplete:
// 重新规划成功,此时data为RouteBase对象
RouteBase rb = (RouteBase)data;
// 引擎载入路线
ns.takeRoute(rb);
break;
case NaviSession.Event.routeFailed:
// 路线规划失败,此时data为RouterErrorInfo对象
RouterErrorInfo rei = (RouterErrorInfo)data;
// 其中包含了错误信息
Logger.e(TAG, "算路失败,错误码: " + rei.errCode + ", 错误信息: " + rei.additionalMessage);
break;
case NaviSession.Event.rerouteFailed:
// 路线重规划失败
// 处理同上
break;
case NaviSession.Event.destArrived:
// 到达目的地
// 结束导航
endNavi();
break;
case NaviSession.Event.tracking:
// 当获取到GPS是,会收到此事件,此事件比较重要,是用来更新车位置信息,绘制电子眼等的回调,也是最频繁的回调事件
// 此事件时,data为NaviSessionData对象,关于此对象,请参看NaviSessionData信息
NaviSessionData d = (NaviSessionData)data;
setCarPosition(d.carPos);
setCarOriented(d.carOri);
drawCameras(CameraSystem.getCameras());
// 绘制前方转弯箭头
drawArrow(mRouteBase);
// 开启高速路牌提醒模块时,需要在此回调中绘制路牌
drawHighwayGuide();
break;
case NaviSession.Event.routing:
// 路线计算中
Logger.d(TAG, "路线计算中 ...");
break;
case NaviSession.Event.routeCancelled:
// 取消算路
Logger.d(TAG, "取消算路");
break;
case NaviSession.Event.rerouteCancelled:
// 取消重算路
Logger.d(TAG, "取消重算路");
break;
case NaviSession.Event.manualStartStateBegin:
// 手动起点模式开始
// 表示进入手动起点模式,此时可以将起点设置为非车所在位置,不会产生重计算事件
Logger.d(TAG, "手动起点模式开始");
break;
case NaviSession.Event.manualStartStateEnd:
// 手动起点模式结束
// 此时如果起点不在车所在位置,将会产生重算路事件
Logger.d(TAG, "手动起点模式结束");
break;
case NaviSession.Event.newRouteTaken:
// 引擎已经采纳新路线
// 此时需要调用NaviSession.getRoute()来获取引擎内部的路线
RouteBase route = ns.getRoute();
break;
case NaviSession.Event.needsReroute:
// 偏航,且不自动重算路(NaviSessionParams。autoReroute为false时)的情况下,会收到此消息
reroute();
break;
case NaviSession.Event.simNaviBegin:
// 开始模拟导航,保存当前导航状态
break;
case NaviSession.Event.simNaviEnd:
// 结束模拟导航,恢复模拟导航前的状态
break;
case NaviSession.Event.cameraAuthFailed
// 电子眼授权失败
int err = ((Integer)data).intValue();
Logger.d(TAG, "错误码: " + err);
break;
case NaviSession.Event.wayPointArrived:
int index = ((Integer)data).intValue();
Logger.d(TAG, "已经到达第" + index + "个途径点");
break;
}
}
}, params);
©Mapbar Engine Team;All Rights Reserved