百度导航驾车页提供了一套接口和示例UI,开发者可根据Demo中的驾车页页面UI进行开发。
1生命周期
路线规划成功后,就可以使用驾车页BaiduNaviManagerFactory.getRouteResultManager(),驾车页依赖App的页面生命周期,开发时,只需要将百度导航SDK驾车页生命周期接口挂接到对应页面的生命周期接口即可,App页面既可以是Activity,也可以是Fragment等。生命周期如下
/** * 在{@linkplain Activity#onCreate()}} 或者 {@linkplain Fragment#onCreateView()}} 中调用 */ void onCreate(Context context); /** * 在{@linkplain Activity#onResume()}} 或者 {@linkplain Fragment#onResume()}} 中调用 */ void onResume(); /** * 在{@linkplain Activity#onPause()}} 或者 {@linkplain Fragment#onPause()}} 中调用 */ void onPause(); /** * 在{@linkplain Activity#onDestroy()}} 或者 {@linkplain Fragment#onDestroy()}} 中调用 */ void onDestroy();
2其他接口说明
1.全览路线
/** * 全览当前路线 */ void fullView();
2.开启专业导航
无需重新算路,直接跳转新页面调用专业导航生命周期即可,可参考demo。
/** * 开启专业导航 * * @return 返回true,代表可以跳转至专业导航 */ boolean startNavi();
3.路线点击事件
路线规划成功后通常情况下会出现3条路线,该接口可监听某条路线是否被点击,如果被点击可调用BaiduNaviManagerFactory.getRouteGuideManager().selectRoute(index)高亮并选中该条路线。
/** * 路线点击事件监听 */ void setRouteClickedListener(IRouteClickedListener listener); /** * 路线点击事件 */ nterface IRouteClickedListener { /** * 点击了第几条 * @param index */ void routeClicked(int index); }
4.获取3Tab信息、路线详情和限行消息
/** * 获取3Tab信息和路线详情 */ Bundle getRouteInfo();
返回的bundle中数据如下,具体使用方法可以参考demo。
// 3Tab信息 ArrayList<BNRoutePlanItem> mRoutePlanItems = bundle.getParcelableArrayList(BNaviCommonParams.BNRouteInfoKey.INFO_TAB); // 路线详情 Bundle mRouteDetails = bundle.getBundle(BNaviCommonParams.BNRouteInfoKey.INFO_ROUTE_DETAIL); // 第一条路线的路线详情 ArrayList<BNRouteDetail> detail0 = mRouteDetails.<BNRouteDetail>getParcelableArrayList("0"); // 第二条路线的路线详情 ArrayList<BNRouteDetail> detail1 = mRouteDetails.<BNRouteDetail>getParcelableArrayList("1"); // 第三条路线的路线详情 ArrayList<BNRouteDetail> detail2 = mRouteDetails.<BNRouteDetail>getParcelableArrayList("2"); // 限行消息 ArrayList<String> limitInfos = bundle.getStringArrayList(BNaviCommonParams.BNRouteInfoKey.TRAFFIC_LIMIT_INFO); if (limitInfos != null) { for (int i = 0; i < limitInfos.size(); i++) { String[] arr = limitInfos.get(i).split(","); Log.e("TAG", "第" + arr[0] + "条路线限行消息:" + arr[1]); } }
3驾车页设置
驾车页设置BaiduNaviManagerFactory.getRouteResultSettingManager()接口如下
/** * 设置实时路况是否开启 */ void setRealRoadCondition(Context context); /** * 获取实时路况是否开启 */ boolean isRealRoadConditionOpen(); /** * 设置全览路线边距 * @param left * @param top * @param right * @param bottom */ void setRouteMargin(int left, int top, int right, int bottom);
4驾车页小黄条
小黄条需要开发者提供一个容器,通过驾车页接口将小黄条添加至容器即可显示。示例如下:
FrameLayout ybContainer = mRootView.findViewById(R.id.yb_container); BaiduNaviManagerFactory.getRouteResultManager().addYellowTipsToContainer(ybContainer);
5长途功能
驾车页支持长途功能途径市、途径路、服务区、检查站、天气五个功能。IBNRouteResultManager具体接口如下:
/** * 处理长途途径市按钮的点击 * * @param checked 按钮是否选中 */ void handleCityClick(boolean checked); /** * 处理长途途径路按钮的点击 * * @param checked 按钮是否选中 */ void handleRouteClick(boolean checked); /** * 处理长途途径服务区按钮的点击 * * @param checked 按钮是否选中 */ void handleServiceClick(boolean checked); /** * 处理长途检查站按钮的点击 * * @param checked 按钮是否选中 */ void handleCheckpointClick(boolean checked); /** * 处理长途天气按钮的点击 * * @param checked 按钮是否选中 */ void handleWeatherClick(boolean checked);
用户可以在页面中创建五个按钮,记录按钮的点击状态,当点击相关按钮时将点击状态传入相关方法,路线就会显示相关的长途信息。可参考demo中LongDistanceController类。
注:由于点击路线上的长途信息(比如点击了某个服务区)可以添加途径点,添加途径点算路是由s d k内部算路的,开发者如果需要监听算路消息需要通过下面方法进行监听BaiduNaviManagerFactory.getRouteResultManager().setCalcRouteByViaListener( new IBNRouteResultManager.ICalcRouteByViaListener() { @Override public void onStart() { Log.e(TAG, "开始算路"); } public void onSuccess() { Log.e(TAG, "算路成功"); } @Override public void onFailed(int errorCode) { Log.e(TAG, "算路失败"); } });