最近用到百度地图API,在这里跟大家分享一下经验。要使用百度API和google一样先要去百度地图API网站上去申请KEY,申请地址如下:http://dev.baidu.com/wiki/static/imap/key/ ,申请完毕以后就可以是用了,但是百度API是作为第三方插件的方式加入到项目中所以,你还需要下载百度地图API的jar包,下载地址如下:http://dev.baidu.com/wiki/imap/index.php?title=Android%E5%B9%B3%E5%8F%B0/%E7%9B%B8%E5%85%B3%E4%B8%8B%E8%BD%BD

然后打开下载包可以发现里面有一个jar包和一个.so文件,需要把这两个文件拷贝到项目根目录下面的libs文件夹下,并且还要新建一个armeabi文件夹,因为.so文件需要放在这个文件夹下面,具体步骤可以参考《百度手机地图sdk使用简要说明》,最后需要在Manifest文件中添加权限和版本支持如下:

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!--版本支持-->
    <supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />
<uses-sdk android:minSdkVersion="3" />

到这里已经完事具备,大家可以在布局文件中加入Mapview了,代码如下:

    <com.baidu.mapapi.MapView
android:id="@+id/mv_locate_map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />

然后写一个类继承MapActivity把布局文件设置进去就可以在地图上显示了,如下:

现在来讲讲百度API主要的几个类的使用,首先我们需要得到一个BMapManager对象的实例,刚刚大家看到我们的布局文件并没有加入key的地方,其实百度地图的key是在程序中添加的代码如下:

                           
                           manager = new BMapManager(context);
manager.init(“API-KEY 放在这里”, new MKGeneralListener() {
@Override
public void onGetPermissionState(int error) {
if (error == MKEvent.ERROR_PERMISSION_DENIED) {
// 权限错误
}
}
@Override
public void onGetNetworkState(int error) {
// 网络错误
}
});
manager.start();
locationManager = manager.getLocationManager();

得到了BMapManager对象以后我们就可以得到LocationManager对象,这个对象大家应该都很清楚,通过它可以得到当前位置信息,还可以通过它添加位置监听器。这里和google地图不同的是,当在添加位置监听器的时候并没有一起设置监听器的触发时间间隔,如果需要必须通过MKLocationManager的setNoitifyInternal(maxTime,minTime)方法添加,第一个参数的通知的最大时间间隔,第二个则是最小时间间隔。注册监听器这是调用MKLocationManager的requestLocationUpdates(listener); 方法,通过这些方法的设置我们就可以定时得到当前的位置信息了。

然后下面应该把当前位置展示在地图上并加上标记,实现这些功能就需要MapView对象了,当然得到MapView对象很简单,大家应该都明白就不多说了。得到mapView对象以后需要设置几个常用的参数代码如下:

                  mapView.setBuiltInZoomControls(true);
mapView.setDrawOverlayWhenZooming(true);

第一个是在地图上面加上缩放按钮,第二个设置是在缩放的时候重绘地图标记。然后需要控制地图我们需要得到MapController对象代码如下:

                  control = this.mapView.getController();
               control.setZoom(zoomLeve);

这样就得到了地图控制器,第二个是设置地图的默认缩放等级,参数在0-18之间的整形参数。我这里是设置的最大缩放级别。然而在地图上加标记需要通过Overlay和ItemizedOverlay对象来实现,当然百度地图API提供了几个内置的对象给我们使用,这里我使用的是MyLocationOverlay对象代码如下:

                 MyLocationOverlay overlay = new MyLocationOverlay(context, mapView);
mapView.getOverlays().add(overlay)

MyLocationOverlay 初始化的时候需要两个参数一个就是上下文对象,一个就是地图对象,这样就可以得到一个标记当前位置的图标,然后把这个图标加入到地图中就可以了。效果如上图所示。然后再位置监听器里面加上更新地图的代码就可以了,代码如下:

         @Override
         public void onLocationChanged(Location location) {
if (location != null) {
GeoPoint point = new GeoPoint((int) (latitude * 1E6),
(int) (longitude * 1E6));
//mv_locate_map.getOverlays().clear(); //清除所有标记
manager.addOverlay(overlay); //添加标记
manager.getControl().animateTo(point); //把地图移动到当前点上
mv_locate_map.invalidate(); //重绘地图      
                  }
}

我这里之所以要清除所有标记应该前面我添加了每隔几秒钟就会更新地图标记,不然地图上的标记会越来越多,到后面对性能有影响,这个也是根据程序逻辑来的,大家可以不用每次清除也可以。百度地图API还提供了很多地图标记和查询功能,大家可以参考《百度地图API文档》里面有详细介绍。

下面来讲讲我在使用中遇到的种种问题以及我的解决办法吧,首先说说我遇到的问题。

其实这个问题主要是产生于我要添加多个位置监听器,而且每个监听器的做得事不同,而且每个监听器关闭的时间也不同,这是就出现一个问题,比如我现在同事添加了三个监听器,但是我只要调用removeUpdates(listener);方法就会把所有监听器移除。这个问题纠结我几天,最后我想出的办法就是在添加监听器的时候同时把监听器放到一个Map<String, LocationListener> 中给每个监听器命一个名字,然后在需要移除的时候根据这个名字把这个监听器对象从map中取出来再移除就行了。至于为什么会出现这种情况我也不明白,可能是一个BUG吧。

还有一个还有一个需要注意的是BMapManager对象初始化完成以后必须调用manager.start();方法才能正常展示地图,不然地图不会显示,与之对应的当然有个manager.stop();方法,这个stop方法千万不能乱用,如果你没有完全脱离是用百度API的话最好别调用,不然所有地图中的监听器都会失效。

还有一个地方也需要调用start()方法就是在onResume()方法中,代码如下:

         @Override
protected void onResume() {
if (manager != null) {
manager.onStartMap();
}  super.onResume();
}

如果大家觉得我哪里说得不对的请指教,多多交流···呵呵

android 百度地图应用相关推荐

  1. android百度地图覆盖物异步加载图片,Android 百度地图marker中图片不显示的解决方法(推荐)...

    目的: 根据提供的多个经纬度,显示所在地的marker样式,如下: 问题: 1.发现marker中在线加载的图片无法显示出来: 2.获取多个对象后,却只显示出了一个marker: 以下为官网实现方法: ...

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

    目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...

  3. [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题

        最近做android百度地图,但是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--只显示网格而没有显示地图,网络 ...

  4. android百度地图标方向,Android百度地图之方向感应和模式更改

    本文实例为大家分享了Android百度地图之方向感应和模式更改,供大家参考,具体内容如下 目标效果: 菜单中设置几种模式,点击可查看不同的地图形式,这里随便截几张图. 1.首先要去百度地图网站 htt ...

  5. android百度地图单点定位_Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡...

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...

  6. Android百度地图

    Android百度地图 1.先激活百度地图的账户 2.在终端获取SHA,创建应用 3.在百度地图开发平台获取AK 4.在官网下载所需配置 5.解压后放在项目的libs文件下 6.设计如下界面: 7.在 ...

  7. Android百度地图之位置定位和附近查找代码简单实现 (上)

    很长时间没有做Android相关知识了,闲暇之余再弄了弄最新的百度地图API,主要是进行百度地图附近餐馆查找功能来练练手,同时熟悉下最新的API教程.文章比较基础,也希望对你有所帮助~参考前文:   ...

  8. Android 百度地图开发(二)

    前面我们一起了解了百度地图的申请与集成Android 百度地图开发(一),今天我们接着来学习百度地图. 今天主要来了解如下问题: 1.百度地图的生命周期控制 上一篇张我们已经在布局文件里增加了mapV ...

  9. Android百度地图SDK:隐藏比例尺,隐藏百度LOGO,隐藏缩放控件

     Android百度地图SDK:隐藏(不显示)比例尺,隐藏(不显示)百度LOGO,隐藏(不显示)缩放控件 在自己的Android应用开发中使用百度地图SDK,百度会自动在MapView上添加百度的 ...

  10. android百度地图API 骑行,步行导航的DEMO以及途径点问题

    android百度地图API的简单骑行,步行的导航demo,以及关于多个路径点问题的说明 ##注:目前基础百度地图API的步行以及骑行是不支持多个路径点的,只能单点对单点的,如果你真的想多个途径点导航 ...

最新文章

  1. 在此iphone上尚未受信任_苹果中国官网开启限购!每款iphone每人限购两部
  2. java B2B2C电子商务平台分析之十五-----EureKa服务注册与发现
  3. BZOJ 4720 [Noip2016]换教室
  4. License for package Android SDK Build-Tools 28.0.2 not accepted.(MAC)
  5. html5 video修改默认样式,HTML5中将video设置为背景的方法
  6. SessionHelper
  7. 信息学奥赛一本通 1128:图像模糊处理 | OpenJudge NOI 1.8 13:图像模糊处理
  8. 漫步最优化二十一——全局收敛
  9. javascript手册安卓版_JavaScript 完全手册(2018版)
  10. 【如何快速的开发一个完整的iOS直播app】(原理篇)
  11. 如何在CAD中实现影像与矢量叠加套合(七参数法)
  12. 计算机教师培训项目申报书,课题《基于培养教师信息素养的教学研究》申报书(2013年4月—2015年3月)...
  13. LeetCode1419. 数青蛙
  14. VRChat简易教程1-开发环境准备(SDK)
  15. powershell操作excel
  16. DELL PC服务器PowerEdge 管理工具OMSA的使用
  17. 安装Quartus18.1 软件和Modsim仿真软件,进行数字电路的仿真与验证
  18. BIN,S19,M0T,SREC,HEX文件解析;FileParse(一)之文件详解
  19. Android设备支持USB转RJ45有线网卡( 沐阳网卡JP1081B/9700)
  20. 小灰灰的APP学习之路(一)--开发工具安装

热门文章

  1. nginx反向代理实现直接域名访问
  2. 双系统装完只能u盘启动_双系统启动引导修复 双系统启动引导设置教程
  3. 毕业设计指导教师评语 计算机,毕业设计指导教师评语
  4. 乡村黄昏[原创诗一首]
  5. 2021-10-21-Flask-04 模型关系的建立,增删改查的演示,一篇文章让你直接搞懂Flask模型
  6. 字节跳动后端日常实习一二+hr面面经(已OC)
  7. 计算机 在职硕士报考条件,2022在职硕士-在职研究生报考条件-中公考研
  8. 计算机办公操作excel,办公中常用的Word及Excel的方法有哪些
  9. 如何制作纯文字视频快闪视频
  10. 去掉vue warn的方法