Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android百度地圖SDK 導航初始化和地圖初始化引起的沖突

Android百度地圖SDK 導航初始化和地圖初始化引起的沖突

編輯:關於Android編程

如題,同樣是百度地圖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驗證未通過或者無網絡了,所以當時以為是地圖圖層刷新出現了問題,直到最後可能意識到是導航初始化的時間點選的有誤引起的問題,才找到了問題點,就是因為導航引擎初始化和地圖圖層的加載發生了沖突才導致了地圖圖層加載失敗,於是後來的問題也就好解決了,我的做法是在發起導航之前再做引擎的初始化,而且這個初始化只需要做一次,時間也不會很長所以完全可以忽略這種延遲。

 

因此當出現地圖圖層加載異常無法正常顯示無法拖動的時候,可以考慮下我所遇到的情況。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved