关于基础百度地图和地图导航的bug问题

这个情况出现在项目开发中的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";
   }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值