这个情况出现在项目开发中的bug,就是百度地图开发中的基础地图和地图导航,在正常情况下,基础地图应该在地图导航之前(因为百度基础地图和导航是分开的),先说一下自己的bug问题,因为在项目中有不同入口可以进入导航那个模块,所以也就出现可能,用户在没有使用基础地图之前就导航,会崩溃,所以为了避免这个问题的出现,最好在app开启的时候就先拿到BaiduMap对象,百度会自动创建对象,之后就不用担心基础地图未创建就进行导航了。地图导航那个界面就官网上有,直接复制就可以使用,只要传入起点和终点坐标就可以了。下面是导航界面的完成代码,原封不动,配置好ak和拿到tts白名单之后,放好架包和so文件,就能正常导航了
public class BNDemoGuideActivity extends Activity { PRivate final String TAG = BNDemoGuideActivity.class.getName(); private BNRoutePlanNode mBNRoutePlanNode = null; private BaiduNaviCommonModule mBaiduNaviCommonModule = null; /* * 对于导航模块有两种方式来实现发起导航。 1:使用通用接口来实现 2:使用传统接口来实现 * */ // 是否使用通用接口 private boolean useCommonInterface = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); createHandler(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { } View view = null; if (useCommonInterface) { //使用通用接口 mBaiduNaviCommonModule = NaviModuleFactory.getNaviModuleManager().getNaviCommonModule( NaviModuleImpl.BNaviCommonModuleConstants.ROUTE_GUIDE_MODULE, this, BNaviBaseCallbackModel.BNaviBaseCallbackConstants.CALLBACK_ROUTEGUIDE_TYPE, mOnNavigationListener); if(mBaiduNaviCommonModule != null) { mBaiduNaviCommonModule.onCreate(); view = mBaiduNaviCommonModule.getView(); } } else { //使用传统接口 view = BNRouteGuideManager.getInstance().onCreate(this,mOnNavigationListener); } if (view != null) { setContentView(view); } Intent intent = getIntent(); if (intent != null) { Bundle bundle = intent.getExtras(); if (bundle != null) { mBNRoutePlanNode = (BNRoutePlanNode) bundle.getSerializable(ParkInformationActivity.ROUTE_PLAN_NODE); } } //显示自定义图标 if (hd != null) { hd.sendEmptyMessageAtTime(MSG_SHOW, 5000); } } @Override protected void onResume() { super.onResume(); if(useCommonInterface) { if(mBaiduNaviCommonModule != null) { mBaiduNaviCommonModule.onResume(); } } else { BNRouteGuideManager.getInstance().onResume(); } } protected void onPause() { super.onPause(); if(useCommonInterface) { if(mBaiduNaviCommonModule != null) { mBaiduNaviCommonModule.onPause(); } } else { BNRouteGuideManager.getInstance().onPause(); } }; @Override protected void onDestroy() { super.onDestroy(); if(useCommonInterface) { if(mBaiduNaviCommonModule != null) { mBaiduNaviCommonModule.onDestroy(); } } else { BNRouteGuideManager.getInstance().onDestroy(); } } @Override protected void onStop() { super.onStop(); if(useCommonInterface) { if(mBaiduNaviCommonModule != null) { mBaiduNaviCommonModule.onStop(); } } else { BNRouteGuideManager.getInstance().onStop(); } } @Override public void onBackPressed() { if(useCommonInterface) { if(mBaiduNaviCommonModule != null) { mBaiduNaviCommonModule.onBackPressed(false); } } else { BNRouteGuideManager.getInstance().onBackPressed(false); } } public void onConfigurationChanged(android.content.res.Configuration newConfig) { super.onConfigurationChanged(newConfig); if(useCommonInterface) { if(mBaiduNaviCommonModule != null) { mBaiduNaviCommonModule.onConfigurationChanged(newConfig); } } else { BNRouteGuideManager.getInstance().onConfigurationChanged(newConfig); } }; @Override public boolean onKeyDown(int keyCode, android.view.KeyEvent event) { if(useCommonInterface) { if(mBaiduNaviCommonModule != null) { Bundle mBundle = new Bundle(); mBundle.putInt(RouteGuideModuleConstants.KEY_TYPE_KEYCODE, keyCode); mBundle.putParcelable(RouteGuideModuleConstants.KEY_TYPE_EVENT, event); mBaiduNaviCommonModule.setModuleParams(RouteGuideModuleConstants.METHOD_TYPE_ON_KEY_DOWN, mBundle); try { Boolean ret = (Boolean)mBundle.get(RET_COMMON_MODULE); if(ret) { return true; } }catch(Exception e){ e.printStackTrace(); } } } return super.onKeyDown(keyCode, event); } @Override protected void onStart() { super.onStart(); // TODO Auto-generated method stub if(useCommonInterface) { if(mBaiduNaviCommonModule != null) { mBaiduNaviCommonModule.onStart(); } } else { BNRouteGuideManager.getInstance().onStart(); } } private void addCustomizedLayerItems() { List<CustomizedLayerItem> items = new ArrayList<CustomizedLayerItem>(); CustomizedLayerItem item1 = null; if (mBNRoutePlanNode != null) { item1 = new CustomizedLayerItem(mBNRoutePlanNode.getLongitude(), mBNRoutePlanNode.getLatitude(), mBNRoutePlanNode.getCoordinateType(), getResources().getDrawable(R.drawable.app_logo), CustomizedLayerItem.ALIGN_CENTER); items.add(item1); BNRouteGuideManager.getInstance().setCustomizedLayerItems(items); } BNRouteGuideManager.getInstance().showCustomizedLayer(true); } private static final int MSG_SHOW = 1; private static final int MSG_HIDE = 2; private static final int MSG_RESET_NODE = 3; private Handler hd = null; private void createHandler() { if (hd == null) { hd = new Handler(getMainLooper()) { public void handleMessage(android.os.Message msg) { if (msg.what == MSG_SHOW) { addCustomizedLayerItems(); } else if (msg.what == MSG_HIDE) { BNRouteGuideManager.getInstance().showCustomizedLayer(false); } else if (msg.what == MSG_RESET_NODE) { BNRouteGuideManager.getInstance().resetEndNodeInNavi( new BNRoutePlanNode(116.21142, 40.85087, "百度大厦11", null, CoordinateType.GCJ02)); } }; }; } } private OnNavigationListener mOnNavigationListener = new OnNavigationListener() { @Override public void onNaviGuideEnd() { //退出导航 finish(); } @Override public void notifyOtherAction(int actionType, int arg1, int arg2, Object obj) { if (actionType == 0) { //导航到达目的地 自动退出 Log.i(TAG, "notifyOtherAction actionType = " + actionType + ",导航到达目的地!"); } Log.i(TAG, "actionType:" + actionType + "arg1:" + arg1 + "arg2:" + arg2 + "obj:" + obj.toString()); } }; private final static String RET_COMMON_MODULE = "module.ret"; private interface RouteGuideModuleConstants { final static int METHOD_TYPE_ON_KEY_DOWN = 0x01; final static String KEY_TYPE_KEYCODE = "keyCode"; final static String KEY_TYPE_EVENT = "event"; }}
新闻热点
疑难解答