編輯:關於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驗證未通過或者無網絡了,所以當時以為是地圖圖層刷新出現了問題,直到最後可能意識到是導航初始化的時間點選的有誤引起的問題,才找到了問題點,就是因為導航引擎初始化和地圖圖層的加載發生了沖突才導致了地圖圖層加載失敗,於是後來的問題也就好解決了,我的做法是在發起導航之前再做引擎的初始化,而且這個初始化只需要做一次,時間也不會很長所以完全可以忽略這種延遲。
因此當出現地圖圖層加載異常無法正常顯示無法拖動的時候,可以考慮下我所遇到的情況。
Android之IphoneTreeView帶組指示器的ExpandableListView效果
之前實現過一次這種效果的ExpandableListView:http://www.jb51.net/article/38482.htm,帶效果比較挫,最近,在參考聯系人
Android通訊錄管理(獲取聯系人、通話記錄、短信消息)(一)
Android通訊錄管理(獲取聯系人、通話記錄、短信消息) 2014年2月26日 通訊錄開發研究學習 前言:前陣子主要是記錄了如何對聯系人的一些操作,比如搜索,全
Android學習項目之簡易版微信為例(二)
1 概述從這篇開始,正式進入簡易版微信的開發。深入學習前,想談談個人對Android程序開發一些理解,不一定正確,只是自己的一點想法。Android程序開發不像我們在大學
Android學習之往系統應用中添加framework層的jar包
Framework中的app為什麼在編譯的時候需要到源碼中編譯: 因為缺少必要的包(源碼)----在連接的時候是以class文件來連接編譯的 以Systemeui為例