因为工作的需要,我在做软件的时候用到地图,并且需要从地图中搜索公交、商户等信息,因此选择百度地图。百度地图搜索的poi搜索正好符合我的需求,但是软件完成后发现在软件第一次执行的时候总是出错,百度地图无法返回搜索数据。
经过调试发现百度地图搜索的回调函数未执行,从网上搜索也没有找到结果。
最后试了几种方法总算给做出了了。
首先讲下百度地图的执行吧。
我们的Activity需要继承百度的MapActivity,
在oncreate中初始化。
mapMgr = new BMapManager(this.getApplication()); //新建一个地图管理器 mapMgr.init("百度地图mapkey", null); super.initMapActivity(mapMgr); //获取mapView mv = (MapView) this.findViewById(R.id.bmapsView); mapCtrl = mv.getController(); //取得mapView的控制 GeoPoint point = new GeoPoint((int)(31.760765*1E6), (int)(117.257397*1E6)); mapCtrl.setCenter(point); //设置地图显示中心点 mapCtrl.setZoom(16); //设置放大等级
我便新开了一个线程,在线程中等待一秒钟之后才开始执行百度地图的搜索。感觉可能是因为activity刚开始启动的时候,百度地图的那个方法没有能够运行,所以等待一秒再让其运行。
new Thread(new Runnable() { @Override public void run() { mkSearch = new MKSearch(); MKSearchListener searchListener = new MKSearchListener() { @Override public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) { } @Override public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetRGCShareUrlResult(String arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetPoiResult(MKPoiResult res, int type, int iError) { Log.i("maa","调用我吧"); poiInfos = res.getAllPoi(); if(res != null){ jiaotonglist = new ArrayList<Jiaotong>(); for(int i = 0;i<poiInfos.size();i++){ MKPoiInfo poi = poiInfos.get(i); String s = poi.name+":"+poi.address; GeoPoint pt = poi.pt; int size = s.length(); int x = (int)size/16; String s1 = ""; String s2 = ""; if(x>0){ for(int j= 0;j<x;j++){ s1 = s.substring(j*16, (j+1)*16); s2 = s2+s1+"\n"; } s2 = s2 +s.substring(x*16); s = s2; } Jiaotong jt = new Jiaotong(sxarray[i],s,R.drawable.suolue,pt); jiaotonglist.add(jt); } handler.sendEmptyMessage(1); //lv.requestFocus(); //lv.requestFocus( View.FOCUS_DOWN); //刷新地图 Log.i("maa","成功加载:"+searchType); } Log.i("maa","已经加载:"+searchType); } @Override public void onGetPoiDetailSearchResult(int arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onGetAddrResult(MKAddrInfo arg0, int arg1) { // TODO Auto-generated method stub } }; mkSearch.init(mapMgr, searchListener); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } GeoPoint p = new GeoPoint((int)(31.760765*1E6), (int)(117.257397*1E6)); mkSearch.poiSearchNearBy("公交车站", p, 5000); } }).start();
我的代码直接是不能运行的,主要跟大家说一下我的思路。
如果你有更好的方法,欢迎交流。