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 。供各位参考

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-31 05:35:11

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

Android百度地图SDK 导航SDK2.0结合定位SDK6.0.5的导航参数设置方法

前段时间做了一阵百度地图的内容,还未来的及总结,很快有些问题及解决办法都忘了,现在记录下之前比较纠结的问题,分享如下 如题,现在的导航SDK2.0的导航发起函数如下 public boolean launchNavigator(Activity activity, java.util.List<BNRoutePlanNode> nodes, int preference, boolean isGPSNav, BaiduNaviManager.RoutePlanListener listener

Android中级篇之百度地图SDK v3.5.0-FragmentMap地图框架[图解SupportMapFragment类]

创建一个基于Fragment的地图框架 SupportMapFragment SupportMapFragment 类,管理地图生命周期. 构造器概要 构造器和说明: SupportMapFragment() 构造函数 方法概要 限定符和类型 方法 说明 BaiduMap getBaiduMap() 获取百度地图控制器,当执行完 onCreateView 函数之后调用,否则返回 null. MapView getMapView() 获取百度地图控件 static SupportMapFragme

操蛋的百度地图SDK onReceiveLocation收不到回调

之前项目应为用百度地图各种操蛋,所以放弃使用百度地图SDK改用腾讯地图SDK. 虽然腾讯地图SDK比百度地图SDK各种好用,但是考虑到做地图闭经百度能力是强于腾讯的,而且百度出了新的5.0SDK,于是想试试. 新版SDK接口科学,文档简单可读性高,没几分钟就全部弄好进入调试模式.但是无论怎么都收不到onReceiveLocation回调. 最开始以为是使用AndroidStudio gradle配置问题没有引入so库,但是发现编译出来的apk其实有so库的. 然后就在想是不是百度提供的AK需要审

Android 百度鹰眼轨迹SDK(v2.1.6)

闲聊 看过<鹰眼追击>这部电影的读者一定对"鹰眼"这台巨无霸计算机印象深刻,如今我们能够实现自己的鹰眼. 效果图 本篇为百度地图SDK第三篇博文 第一篇实现:Android 百度地图周边雷达(v6.1.3)及覆盖物 第二篇实现:Android 百度定位SDK(v6.1.3)结合方向传感器 本博文为第三篇 使用百度鹰眼轨迹SDK能够实现的功能 轨迹追踪 借助GPS.基站.Wi-Fi和传感器信息,实现室内.外高精度的连续轨迹追踪.总体定位精度50m: GPS:10m(取决于芯片

Android studio 百度地图开发(3)地图导航

email:[email protected] 开发环境:win7 64位,Android Studio,请注意是Android Studio,使用的导航SDK版本:3.1.0. 地图显示.工程配置请参考:Android studio 百度地图开发(1)配置工程.显示地图 百度地图定位请参考:Android studio 百度地图开发(2)地图定位 一.我为百度做点事 因为在写定位功能时自己想从头到尾地写,但最后完全是参考了百度官网上的Demo才弄出来,后来发现用Android Studio做导

Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能

定位+移动选址 百学须先立志-学前须知: 我们经常在各大主流APP上要求被写上地址,如百度外卖.爱鲜蜂收货地址等等:其中他们大多数是可以让我们在地图上移动选址.就如下面这段GIF演示的一样: 尽信书,不如无书-能学到什么? 1.地图状态MapStatus类及监听setOnMapStatusChangeListener 2.定位LocationClient类 3.反地理编码GeoCoder类 工欲善其事必先利其器-申请Key 百度地图访问应用(AK)申请地址:http://lbsyun.baidu

Android使用百度LBS SDK(一)显示地图MapView

类似百度应用引擎,使用百度的LBS服务,首先我们在百度开放服务平台创建一个应用,如下图: 进入应用详情,然后点击"LBS服务",设置应用: 数字签名的获取方式,可以在Eclipse(ADT 22)中查看,Window->Preferences->Android->Build,SHA1 fingerprint就是我们需要的: Android SDK安全码组成:数字签名+;+包名. 接着下载LBS Android SDK,然后按照百度官方文档的方法进行操作: 第一步:在工

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了~~~~ 效果图: 好了,可以代码,为了方便,我把所有的按钮都放到了menu菜单中. 1.初次启动定位 [java] view plaincopy /** * 定位的客户端 */ private LocationClient mLocationClient; /** * 定位的监听器 */ public MyLoca

Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能

转载请标明出处:http://blog.csdn.net/tanzuai/article/details/43835431 目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴,请参考Android 百度地图 SDK v3.3.0 (二)--- 地图定位和图层展示) 百度地图SDK提供三种类型的POI检索:周边检索.区域检索和城市内检索.下面将以城市