路线规划成功后,就可以使用专业导航服务,专业导航服务依赖App的页面生命周期,开发时,只需要将百度导航SDK专业导航生命周期接口挂接到对应页面的生命周期接口即可,App页面既可以是Activity,也可以是Fragment等。生命周期如下。
1生命周期
/**
* 获取百度专业导航过程View对象,将其加入应用布局内即可显示导航过程.
*/
View onCreate(final FragmentActivity activity, final BNGuideConfig config);
/**
* 百度专业导航生命周期onStart,在{@linkplain Activity#onStart()} 或者 {@linkplain Fragment#onStart()} 中调用
*/
void onStart();
/**
* 百度专业导航生命周期onResume,在{@linkplain Activity#onResume()} 或者 {@linkplain Fragment#onResume()} 中调用
*/
void onResume();
/**
* 百度专业导航生命周期onPause,在{@linkplain Activity#onPause()} 或者 {@linkplain Fragment#onPause()} 中调用
*/
void onPause();
/**
* 百度专业导航生命周期onStop,在{@linkplain Activity#onStop()} 或者 {@linkplain Fragment#onStop()} 中调用
*/
void onStop();
/**
* 百度专业导航生命周期oonDestroy,在{@linkplain Activity#onDestroy()} 或者 {@linkplain Fragment#onDestroy()} 中调用
*
* @param isSwitchToLightNavi 在退出专业导航后是否切换到轻导航
*/
void onDestroy(boolean isSwitchToLightNavi);
2重要参数和方法说明
以下是专业导航IBNRouteGuideManager相对重要的方法介绍,更多参数和方法请您关注[参考手册]。
专业导航onCreate方法
专业导航onCreate方法BNGuideConfig参数如下
/** * 支持专业导航旧版ui自定义view * @param params 定制化导航参数 * @param callback 添加工具箱上方自定义view * @param leftCallback 添加左下角自定义view * @param bottomCallback 添加最底部自定义view */ private BNGuideConfig(Bundle params, IBNRouteGuideManager.NaviAddViewCallback callback, IBNRouteGuideManager.NaviAddViewCallback leftCallback, IBNRouteGuideManager.NaviAddViewCallback bottomCallback)
其中带NaviAddViewCallback的重载方法表示可以在专业导航界面添加自定义view,带Bundle的重载方法可以传入一些参数来自定义导航。具体可传入的参数如下:
Bundle bundle = new Bundle();
bundle.putBoolean(BNaviCommonParams.ProGuideKey.ADD_MAP, false);
bundle.putBoolean(BNaviCommonParams.ProGuideKey.IS_SUPPORT_FULL_SCREEN, supportFullScreen());
BNGuideConfig config = new BNGuideConfig.Builder()
.params(bundle)
.addLeftViewCallback(new IBNRouteGuideManager.NaviAddViewCallback() {
@Override
public View getAddedView() {
return getCustomView();
}
})
.addBBottomViewCallback(new IBNRouteGuideManager.NaviAddViewCallback() {
@Override
public View getAddedView() {
return getBottomView();
}
/**
* @return sdk获取view高度进行元素避让,必须实现
* 导航中的控件不会随自定义view的高度变化而变化
*/
@Override
public int getViewHeight() {
if (BNDemoOrderManager.getInstance(getActivity())
.getBnCarOrderInfo().size() > 1) {
return ScreenUtil.getInstance().dip2px(60);
}
return ScreenUtil.getInstance().dip2px(50);
}
})
.addBottomViewCallback(new IBNRouteGuideManager.NaviAddViewCallback() {
@Override
public View getAddedView() {
return getCustomView2();
}
/**
* @return sdk获取view高度进行元素避让,必须实现
*/
@Override
public int getViewHeight() {
return ScreenUtil.getInstance().dip2px(40);
}
})
.build();
View view = BaiduNaviManagerFactory.getRouteGuideManager().onCreate(getActivity(), config);
2.横竖屏切换
为了防止在手机横竖屏切换过程中,导航出现布局混乱以及crash等情况,请在页面的onConfigurationChanged生命周期方法内调用专业导航的onConfigurationChanged接口。
@Override
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
super.onConfigurationChanged(newConfig);
BaiduNaviManagerFactory.getRouteGuideManager().onConfigurationChanged(newConfig);
}
3.设置导航事件监听
/** * 设置导航事件监听 * @param callback */ void setNaviListener(IBNaviListener callback);
可监听的事件如下:
/**
* 当前路名更新
*
* @param name 当前道路名
*/
public void onRoadNameUpdate(String name) {
}
/**
* 距离目的地的剩余距离
*
* @param remainDistance 剩余距离,单位米
* @param remainTime 剩余时间,单位秒
*/
public void onRemainInfoUpdate(int remainDistance, int remainTime) {
}
/**
* 途径点eta信息
* @param msg msg.arg1-剩余距离 msg.arg2-剩余时间
*/
public void onViaListRemainInfoUpdate(Message msg) {
}
/**
* 诱导信息
*
* @param naviInfo 对应的诱导信息
*/
public void onGuideInfoUpdate(BNaviInfo naviInfo) {
}
/**
* 高速信息
*
* @param action SHOW: 展示 HIDE: 消隐 UPDATE: 更新信息
* @param info 对应的高速信息
*/
public void onHighWayInfoUpdate(Action action, BNHighwayInfo info) {
}
/**
* 快速路出口信息
*
* @param action SHOW: 展示 HIDE: 消隐 UPDATE: 更新信息
* @param name 快速路名称
* @param dist 离快速路出口的距离
* @param id 快速路ID
*/
public void onFastExitWayInfoUpdate(Action action, String name, int dist, String id) {
}
/**
* 放大图回调接口
*
* @param action 显示/刷新/隐藏动作
* @param enlargeMap 放大图View
* @param remainDistance 剩余距离
* @param progress 路口的进度
* @param roadName 下一个路名
* @param turnIcon 转向标
*/
public void onEnlargeMapUpdate(Action action, View enlargeMap, String remainDistance,
int progress, String roadName, Bitmap turnIcon) {
}
/**
* 日夜模式改变
*
* @param style DayNightMode.DAY: 白天 DayNightMode.NIGHT: 黑夜
*/
public void onDayNightChanged(DayNightMode style) {
}
/**
* 路况信息更新
*
* @param progress 车行驶的进度 单位为浮点类型,0-1为0%-100%
* @param items 路况信息
*/
public void onRoadConditionInfoUpdate(double progress, List<BNRoadCondition> items) {
}
/**
* 主辅路、高架桥信息更新
*
* @param type {@link BNaviCommonParams.BNMainSideBridge}
*/
public void onMainSideBridgeUpdate(int type) {
}
/**
* 车道线信息更新
*
* @param action Action.SHOW:显示 Action.HIDE:消隐
* @param laneItems 车道线数据
*/
public void onLaneInfoUpdate(Action action, List<BNavLineItem> laneItems) {
}
/**
* 速度信息
* 无数据返回 -1
*
* @param speed 车速 km/h
* @param speedLimit 限速
*/
public void onSpeedUpdate(int speed, int speedLimit) {
}
/**
* 超速回调
*/
public void onOverSpeed(int speed, int speedLimit) {
}
/**
* 到达目的地后回调函数
*/
public void onArriveDestination() {
}
/**
* 驾车路径导航到达某个途经点的回调函数
*/
public void onArrivedWayPoint(int index) {
}
/**
* 当GPS位置有更新时的回调函数
* 注:自v5.3.0.1版本之后,该接口返回的坐标系跟随初始化时设置的坐标系
*/
public void onLocationChange(BNaviLocation naviLocation) {
}
/**
* 底图操作态和导航态的回调
*/
public void onMapStateChange(MapStateMode mapStateMode) {
}
/**
* 开始偏航的回调
*/
public void onStartYawing(String flag) {
}
/**
* 偏航成功的回调
*/
public void onYawingSuccess() {
}
/**
* 导航到达途径点附近偏航之后途径点消失的回调
*
* @param index 被删除途径点的索引
*/
public void onYawingArriveViaPoint(int index) {
}
/**
* 导航中通知型消息的回调
*/
public void onNotificationShow(String msg) {
}
/**
* 导航中前方一公里出现严重拥堵的回调
*/
public void onHeavyTraffic() {
}
/**
* 导航结束的回调
*/
public void onNaviGuideEnd() {
}
/**
* 卫星信号变化
*/
public void onSatelliteNumUpdate(int num) {
}
/**
* 偏好修改回调
* @param preferType 当前偏好
*/
public void onPreferChanged(int preferType) {
}
/**
* @param items 路线路况信息
* @param roadCondition 当前路段路况
*/
public void onRoadConditionChange(List<BNaviRoadConditionItem> items
, BNaviRoadConditionItem roadCondition) {
}
4.设置导航视图监听
/** * 设置导航视图监听 * @param listener */ void setNaviViewListener(IBNaviViewListener listener);
可监听的事件如下:
/** * 诱导面板的点击事件 */ void onMainInfoPanCLick(); /** * 界面左上角转向操作的点击回调 */ void onNaviTurnClick(); /** * 全览按钮的点击回调 */ void onFullViewButtonClick(boolean show); /** * 全览小窗口的点击 */ void onFullViewWindowClick(boolean show); /** * 导航页面左下角退出按钮点击后的回调接口 */ void onNaviBackClick(); /** * 底部中间部分点击事件 */ void onBottomBarClick(Action action); /** * 底部右边更多设置按钮点击的回调接口 */ void onNaviSettingClick(); /** * 刷新按钮的回调接口 */ void onRefreshBtnClick(); /** * 地图缩放等级的回调 */ void onZoomLevelChange(int level); /** * 地图点击的回调(国测局GCJ02坐标) */ void onMapClicked(double x, double y); /** * 移动地图的回调 */ void onMapMoved(); /** * 后台诱导悬浮窗的点击 */ void onFloatViewClicked();
5.主辅路切换
/**
* 返回主辅路桥上下类型
*/
int getMainSideBridgeType();
/**
* 切换主辅路/高架桥
* @param type {@link BNaviCommonParams.BNMainSideBridge}
* @param listener 只会返回onSuccess/onFail
*/
void changeRouteByMainSideBridge(int type, ChangeRouteListener listener);
上面2个接口建议配合使用,返回的类型就表示当前可以切换的类型,如下示例
if (BaiduNaviManagerFactory.getRouteGuideManager().getMainSideBridgeType()
== BNaviCommonParams.BNMainSideBridge.MAIN_ROAD) {
BaiduNaviManagerFactory.getRouteGuideManager().changeRouteByMainSideBridge(
BNaviCommonParams.BNMainSideBridge.MAIN_ROAD,
new IBNRouteGuideManager.ChangeRouteListener() {
@Override
public void onSuccess() {
}
@Override
public void onFail() {
}
});
}
6.修改终点重算路
/** * 导航中修改终点重新算路并导航 * @param newEndNode * @return */ boolean resetEndNodeInNavi(BNRoutePlanNode newEndNode);
7.添加途经点
途经点的添加数量可通过设置:BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(10) 限制最大数量
/** * 添加途经点 */ void addViaNodes(List<BNRoutePlanNode> nodes);
可通过setViaPointCount来设置最大途径点的个数(支持4~18个),如下:
BaiduNaviManagerFactory.getCommonSettingManager().setViaPointCount(10)