因为工作的需要,我在做软件的时候用到地图,并且需要从地图中搜索公交、商户等信息,因此选择百度地图。百度地图搜索的poi搜索正好符合我的需求,但是软件完成后发现在软件第一次执行的时候总是出错,百度地图无法返回搜索数据。

经过调试发现百度地图搜索的回调函数未执行,从网上搜索也没有找到结果。

最后试了几种方法总算给做出了了。


首先讲下百度地图的执行吧。

我们的Activity需要继承百度的MapActivity,

在oncreate中初始化。

mapMgr = new BMapManager(this.getApplication());   //新建一个地图管理器mapMgr.init("百度地图mapkey", null);super.initMapActivity(mapMgr);//获取mapViewmv = (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);  //设置放大等级

然后的直接在百度地图中使用mksearch,我的是失败了。

我便新开了一个线程,在线程中等待一秒钟之后才开始执行百度地图的搜索。感觉可能是因为activity刚开始启动的时候,百度地图的那个方法没有能够运行,所以等待一秒再让其运行。

new Thread(new Runnable() {@Overridepublic void run() {mkSearch = new MKSearch();MKSearchListener searchListener = new MKSearchListener() {@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetRGCShareUrlResult(String arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic 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);}@Overridepublic void onGetPoiDetailSearchResult(int arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic 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 blocke.printStackTrace();}GeoPoint p = new GeoPoint((int)(31.760765*1E6), (int)(117.257397*1E6));mkSearch.poiSearchNearBy("公交车站", p, 5000);}}).start();

然后使用hanlder接收消息,将返回的数据写到界面里面就行了。

我的代码直接是不能运行的,主要跟大家说一下我的思路。

如果你有更好的方法,欢迎交流。

更多相关文章

  1. android 借助AccessibilityService实现模拟点击功能-循环一个列
  2. Android(安卓)studio 百度地图开发(9)只显示网格不显示地图或者只
  3. Android使用Google Map服务 - 根据GPS信息在地图上定位
  4. Android/Swing中并发分析
  5. 调用百度语音SDK,简单的语音识别控件
  6. android关于动画完成动作
  7. Android百度地图的搜索及附近地址的检索
  8. Android(安卓)返回键监听
  9. 百度地图locationClient.start()没反应解决办法

随机推荐

  1. Android(安卓)使用Notification自定义通
  2. [Accessibility] Missing contentDescrip
  3. Win7 下Android(安卓)NDK + Cygwin环境配
  4. android之mainfest 参数解说
  5. 用ILMerge合并Silverlight, WindowsPhone
  6. Who is Jack?
  7. Android百度地图之页面跳转
  8. Android应用启动优化:一种DelayLoad的实
  9. Android日志文件的读写工具类
  10. 简易版的 Spring 之如何实现 Constructor