浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
路线规划成功后,就可以使用专业导航服务,专业导航服务依赖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)
  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消