Android百度地图SDK 导航初始化和地图初始化引起的冲突

       如题,同样是百度地图SDK开发过程中遇到的一个问题,交代下背景:

       开发了一款内嵌百度地图的应用,因此里面差不多将目前百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示,POI搜索,行程路线规划,GPS导航。。等等都有。开发最开始用到的SDK版本因为是整合版本,因此各个功能部分的SDK都不确保是最新的,也就没有遇到诸如论坛上的好多仁兄遇到的将分别下载的几个单独的SDK包集成到一个应用中引发的冲突的问题,毕竟之前用的整合包导航SDK还是1.1的定位SDK还是5.3的地图SDK则用的是3.5的,可能也算新的,但是相比目前的导航2.0地图6.0.5来说还是旧的。

       言归正传,因为我将大部分初始化类的工作都放到了一个单独的service中,因此实际的Activity可能只是做了一部分UI的处理工作,当然也包括了地图图层的初始化工作,但是基本可以看做是Service中所做的导航初始化和地图图层的初始化都是同步进行的,当时导航SDK1.1的时候并未发现其他异常,但是到了更新到导航2.0的时候问题就来了。导航初始化如下:

       

	// 初始化导航引擎
	private void initNaviEngine(Activity activity) {
		// 显示加载对话框
		DialogUtil.getInstance().showProgressDialog(mActivity);
		BaiduNaviManager.getInstance().setNativeLibraryPath(getSdcardDir() + "/BaiduNaviSDK_SO");
		BaiduNaviManager.getInstance().init(mActivity, getSdcardDir(),
				DDApp.getInstance().getApplicationInfo().packageName, new NaviInitListener() {
					String authinfo = null;

					@Override
					public void onAuthResult(int status, String msg) {
						if (0 == status) {
							authinfo = "key校验成功!";
						} else {
							authinfo = "key校验失败, " + msg;
						}
						mActivity.runOnUiThread(new Runnable() {

							@Override
							public void run() {
								// Toast.makeText(mActivity, authinfo,
								// Toast.LENGTH_LONG).show();
								Log.d(TAG, authinfo);
							}
						});
					}

					public void initSuccess() {
						// Toast.makeText(mActivity, "百度导航引擎初始化成功",
						// Toast.LENGTH_SHORT).show();
						Log.d(TAG, "百度导航引擎初始化成功");
					}

					public void initStart() {
						// Toast.makeText(mActivity, "百度导航引擎初始化开始",
						// Toast.LENGTH_SHORT).show();
						Log.d(TAG, "百度导航引擎初始化开始");
					}

					public void initFailed() {
						// Toast.makeText(mActivity, "百度导航引擎初始化失败",
						// Toast.LENGTH_SHORT).show();
						Log.d(TAG, "百度导航引擎初始化失败");
					}
				}, null /* mTTSCallback */);
		// BNRouteGuideManager.getInstance().setVoiceModeInNavi(BNRouteGuideManager.VoiceMode.Novice);
		// 显示加载对话框
		DialogUtil.getInstance().dismissProgressDialog();
	}
         地图的初始化则如下:

          

	// 初始化地图
	protected void initMapView() {
		if (mMapView != null)
			deinitMapView();
		mCurrentMode = LocationMode.FOLLOWING;
		mMapView = new MapView(getActivity());
		mBaiduMap = mMapView.getMap();
		mBaiduMap.setMyLocationEnabled(true);
		mBaiduMap.setOnMapLoadedCallback(new OnMapLoadedCallback() {

			@Override
			public void onMapLoaded() {
				// TODO Auto-generated method stub
				bIsFinish = true;
			}
		});

		fl_map.addView(mMapView);
		fl_map.setVisibility(View.VISIBLE);
		// 隐藏百度logo
		View child = mMapView.getChildAt(1);
		if (child != null && child instanceof ImageView) {
			child.setVisibility(View.INVISIBLE);
		}
		hideZoomView(mMapView);
	}
             看似两者并不冲突,但是实际中却发现了很诡异的问题,就是看起来地图图层在刷新时出现了问题,只显示了一片白色,只所以强调是白色是因为如果是灰色网格的话很可能就是key验证未通过或者无网络了,所以当时以为是地图图层刷新出现了问题,直到最后可能意识到是导航初始化的时间点选的有误引起的问题,才找到了问题点,就是因为导航引擎初始化和地图图层的加载发生了冲突才导致了地图图层加载失败,于是后来的问题也就好解决了,我的做法是在发起导航之前再做引擎的初始化,而且这个初始化只需要做一次,时间也不会很长所以完全可以忽略这种延迟。

            因此当出现地图图层加载异常无法正常显示无法拖动的时候,可以考虑下我所遇到的情况。

            最后再说下我的SDK环境,导航SDK 2.0 地图SDK 3.5.0 定位SDK 6.0.5 。供各位参考

            

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值