导航
导航有2种模式,分别是轻导航和专业导航。
轻导航模式
前台轻导航的实现需要在Activity.onCreate()或者Fragment.onCreateView()中初始化轻导航View,把轻导航View add进入第三方APP页面布局中,还需要在Activity或者Fragment的生命周期调用轻导航的生命周期,相关方法在BaiduNaviManagerFactory.getLightNaviManager()中:
/** * 获取百度地图轻导航view * * @param activity * * @return */ View onCreate (Activity activity); /** * 需要在Activity的onStart() 或者 Fragment的onStart() 中调用 */ void onStart (); /** * 需要在Activity的onResume() 或者 Fragment的onResume() 中调用 */ void onResume (); /** * 需要在Activity的onPause() 或者 Fragment的onPause() 中调用 */ void onPause (); /** * 需要在Activity的onStop() 或者 Fragment的onStop() 中调用 */ void onStop (); /** * 需要在Activity的onDestroy() 或者 Fragment的onDestroy() 中调用 * * @param isSwitchToNavi 是否准备切换到专业导航模式 */ void onDestroy ( boolean isSwitchToNavi);
调用方法以OnCreate为例:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { contentView = inflater.inflate(R.layout.onsdk_fragment_light_navi, container, false); // 获取百度地图轻导航view View view = BaiduNaviManagerFactory.getLightNaviManager().onCreate(getActivity()); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); if (view != null) { FrameLayout contentContainer = contentView.findViewById(R.id.content_container); BaiduNaviManagerFactory.getLightNaviSettingManager().setRouteMargin( 100, ScreenUtil.getInstance().dip2px(280), 100, ScreenUtil.getInstance().dip2px(80)); if (view.getParent() != null) { ViewGroup parent = (ViewGroup) view.getParent(); parent.removeView(view); } // add 导航view contentContainer.addView(view, layoutParams); } return contentView; }
更详细的api请参考Demo中的使用。
专业导航模式
专业导航的实现需要在Activity.onCreate()或者Fragment.onCreateView()中初始化专业导航View,把专业导航View add进入第三方APP页面布局中,还需要在Activity或者Fragment的生命周期调用专业导航的生命周期,相关方法在BaiduNaviManagerFactory.getRouteGuideManager()中:
/** * 获取百度专业导航过程View对象,将其加入应用布局内即可显示导航过程. * * @param activity 应用导航过程所属Activity对象 * @param listener 导航过程监听器,主要是监听导航过程中消息分发,比如到达终点、导航结束和更新路名等 * @param callback 添加自定义View到导航中的callback对象 * * @return */ View onCreate(final Activity activity, final OnNavigationListener listener, final NaviAddViewCallback callback); /** * 获取百度专业导航过程View对象,将其加入应用布局内即可显示导航过程. * * @param activity 应用导航过程所属Activity对象 * @param listener 导航过程监听器,主要是监听导航过程中消息分发,比如到达终点、导航结束和更新路名等 * * @return */ View onCreate(final Activity activity, final OnNavigationListener listener); /** * 在 Activity的onStart() 或者 Fragment的onStart() 中调用 */ void onStart(); /** * 在Activity的onResume() 或者 Fragment的onResume() 中调用 */ void onResume(); /** * 在Activity的onPause() 或者 Fragment的onPause() 中调用 */ void onPause(); /** * 在Activity的onStop() 或者 Fragment的onStop() 中调用 */ void onStop(); /** * 在Activity的onDestroy() 或者 Fragment的onDestroy() 中调用 * * @param isSwitchToLightNavi 在退出专业导航后是否切换到轻导航 */ void onDestroy(boolean isSwitchToLightNavi);
调用方法以OnCreate为例:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.onsdk_activity_professional); contentContainer = (FrameLayout) findViewById(R.id.view_container); // 获取百度专业导航过程View对象,将其加入应用布局内即可显示导航过程. View view = BaiduNaviManagerFactory.getRouteGuideManager().onCreate(this, mOnNavigationListener, null); if (view != null) { if (view.getParent() != null) { ViewGroup parent = (ViewGroup) view.getParent(); parent.removeView(view); } contentContainer.addView(view); } }
更详细用法可参考Demo中BNOrderNaviFragment类。
横竖屏切换
为了防止在手机横竖屏切换过程中,导航出现布局混乱以及crash等情况,请在页面的onConfigurationChanged生命周期方法内调用专业导航的onConfigurationChanged接口。
@Override public void onConfigurationChanged(android.content.res.Configuration newConfig) { super.onConfigurationChanged(newConfig); BaiduNaviManagerFactory.getRouteGuideManager().onConfigurationChanged(newConfig); }