Android百度地图

  帖子  
热搜: 二维码 聊天 二维码扫描 传感器 游戏 定位 手势绘图 小项目 相框 绘图 涂鸦 拨打电话 记事本 定时器 通话记录 短信群发 listview 音乐播放器 项目例子 百度地图

Android开发论坛 - 安卓开发论坛 - Android开发 - 安卓论坛 - 移动互联网门户»安卓巴士论坛 Android开发资料共享区 Android实例教程 Android百度地图系列教程

123456789 / 9 页下一页

返回列表


查看: 39747|回复: 82

Android百度地图系列教程

  [复制链接]

   

jingqing

该用户从未签到

电梯直达

楼主

发表于 2013-4-10 10:38:20 | 只看该作者

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x

一、SDK版本v2.0.0初探

一、开发前的准备工作:

1、注册百度账号,并登录。(有百度账号的话直接登录)

2、申请Key,地址:http://developer.baidu.com/map/android-mobile-apply-key.htm

注:经研究发现在申请KEY时,应用名称一定要写成my_app_应用名(也就是说"my_app_"是必须要有的)这样,生成的API密钥后面才可
用。其他格式的也可以生成API密钥,但是在使用过程中会出问题。(比如:一开始就报授权Key错误,或者使用一段时间后就不行了)

3、下载SDK(v2.0.0),地址:http://developer.baidu.com/map/sdkandev-download.htm

注:下载Android SDKv2.0.0
(矢量地图版),里面有BaiduMap_AndroidSDK_v2.0.0_Lib.zip、
BaiduMap_AndroidSDK_v2.0.0_Docs.zip和
BaiduMap_AndroidSDK_v2.0.0_Sample.zip三个压缩包。

二、搭建开发环境,开始The world, hello(世界,你好)之旅:

1、创建android项目,在选SDK时(Choose an SDK to target),选的不是Google APIs,是不带地图服务的SDK 。

2、在项目创建完毕,在工程里新建libs文件夹,将开发包(BaiduMap_AndroidSDK_v2.0.0_Lib.zip)里的
baidumapapi_v2_0_0.jar拷贝到libs根目录下,将libBMapApiEngine_v2_0_0.so和
libvi_voslib.so 拷贝到libs\armeabi目录下,拷贝完成后的工程目录如下图所示:

3、在AndroidManifest.xml文件中添加使用权限:

  1. <!-- 使用网络功能所需权限 -->
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
  3. </uses-permission>
  4. <uses-permission android:name="android.permission.INTERNET" >
  5. </uses-permission>
  6. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
  7. </uses-permission>
  8. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
  9. </uses-permission>
  10. <!-- 读取手机的当前状态权限,没有的话会报错,这个是使用百度地图API必须的 -->
  11. <uses-permission android:name="android.permission.READ_PHONE_STATE" >
  12. </uses-permission>
  13. <!--Cache功能需要读写外部存储器 ,若没这个权限,地图加载不出来-->
  14. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
  15. </uses-permission>

复制代码

4、添加对多种屏幕的支持:

  1. <!--
  2. 添加屏幕支持
  3. android:anyDensity="true"
  4. 这个属性指明应用程序是否包含了能够适用于任何屏幕密度的资源。
  5. 对于支持Android1.6(API Level 4)和更高版本的应用程序,这个属性的默认值是true,
  6. 并且除非绝对的确认这是应用程序正常工作所必须的,否则不应该把它设置为false。
  7. 只是在应用程序直接操作位图时才需要禁止这个属性。
  8. android:largeScreens="true"
  9. 这个属性用于指示应用程序是否支持较大外形的屏幕。
  10. 一个large类型的屏幕被定义成一个比normal类型的手持设备的屏幕明显还要大的屏幕,
  11. 并且为了让应用程序能够良好的使用,使用这个属性时要特别小心,尽管可以依赖系统来调整尺寸,
  12. 以便能够填充屏幕。
  13. 这个属性的默认值实际上在某些版本之间是不同的,因此最好在任何时候都明确的声明这个属性。
  14. 如果设置为false,系统会启用屏幕兼容模式,这时要格外的小心。
  15. android:normalScreens="true"
  16. 这个属性用于指示应用程序是否支持普通外形的屏幕。
  17. 典型的是HVGA中等密度的屏幕,但是WQVGA低密度和WVGA高密度屏幕也被认为是普通屏幕。
  18. 这个属性的默认值是true。
  19. android:smallScreens="true"
  20. 这个属性用于指定应用程序是否支持较小外形的屏幕。
  21. 一个small类型的屏幕被定义成一个比normal(传统的HVGA)类型的屏幕还要小的屏幕。
  22. 外部服务(如Google Play)不会把不支持小屏的应用程序提供给小屏设备,
  23. 因为很少有能够确保该应用程序在小屏幕的设备上正常工作的平台。这个属性的默认值是true。
  24. android:resizeable="true"
  25. 这个属性用于指示针对不同的屏幕尺寸,应用程序是否可以调整尺寸。默认值是true。
  26. -->
  27. <supports-screens
  28. android:anyDensity="true"
  29. android:largeScreens="true"
  30. android:normalScreens="true"
  31. android:resizeable="true"
  32. android:smallScreens="true" />

复制代码

5、配置Activity:

  1. <activity
  2. android:configChanges="orientation|keyboardHidden"
  3. android:label="@string/app_name"
  4. android:name=".BaiduMapBaseActivity"
  5. android:screenOrientation="sensor" >
  6. <intent-filter >
  7. <action android:name="android.intent.action.MAIN" />
  8. <category android:name="android.intent.category.LAUNCHER" />
  9. </intent-filter>
  10. </activity>

复制代码

6、在布局xml文件中添加地图控件:

  1. <com.baidu.mapapi.map.MapView
  2. android:id="@+id/bmapsView"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:clickable="true" />

复制代码

7、 创建地图Activity,并import相关类:

a. 创建地图引擎管理类对象,并初始化。

  1. // 注意:请在调用setContentView前初始化BMapManager对象,否则会报错
  2. mBMapManager = new BMapManager(this.getApplicationContext());
  3. mBMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {
  4. @Override
  5. public void onGetNetworkState(int iError) {
  6. if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
  7. Toast.makeText(BaiduMapBaseActivity.this.getApplicationContext(),
  8. "您的网络出错啦!", Toast.LENGTH_LONG).show();
  9. }
  10. }
  11. @Override
  12. public void onGetPermissionState(int iError) {
  13. if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
  14. // 授权Key错误:
  15. Toast.makeText(BaiduMapBaseActivity.this.getApplicationContext(),
  16. "请在 DemoApplication.java文件输入正确的授权Key!", Toast.LENGTH_LONG).show();
  17. }
  18. }
  19. });

复制代码

b.通过ID获取代表地图显示组件的MapView对象,并设置启用内置的缩放控件。

  1. mMapView = (MapView) this.findViewById(R.id.bmapsView);
  2. // 设置启用内置的缩放控件
  3. mMapView.setBuiltInZoomControls(true);

复制代码

c.获取地图控制器对象,并设置地图的中心点及缩放级别。

  1. // 获取地图控制器,可以用它控制平移和缩放
  2. MapController mMapController = mMapView.getController();
  3. // 用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
  4. // 北京天安门的经纬度:39.915 * 1E6,116.404 * 1E6
  5. // GeoPoint mGeoPoint = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));
  6. // 上海市浦东新区的GPS纬度经度值:31.224078,121.540419
  7. GeoPoint mGeoPoint = new GeoPoint(
  8. (int) (31.224078 * 1E6),
  9. (int) (121.540419 * 1E6));
  10. // 设置地图的中心点
  11. mMapController.setCenter(mGeoPoint);
  12. // 设置地图的缩放级别。 这个值的取值范围是[3,18]。
  13. mMapController.setZoom(13);

复制代码

d.重写Activity的生命周期回调方法onResume()、onPause()和onDestroy(),管理地图引擎管理类对象和显示对象生命周期。

  1. @Override
  2. protected void onResume() {
  3. mMapView.onResume();
  4. if (mBMapManager != null) {
  5. mBMapManager.start();
  6. }
  7. super.onResume();
  8. }
  9. @Override
  10. protected void onPause() {
  11. mMapView.onPause();
  12. if (mBMapManager != null) {
  13. mBMapManager.stop();
  14. }
  15. super.onPause();
  16. }
  17. @Override
  18. protected void onDestroy() {
  19. mMapView.destroy();
  20. if (mBMapManager != null) {
  21. mBMapManager.destroy();
  22. mBMapManager = null;
  23. }
  24. super.onDestroy();
  25. }

复制代码

经过以上这些步骤,加载的是上海市浦东新区地图(基础图),运行工程效果图如下:

注:基本的地图图层,包括若干个缩放级别,显示基本的地图信息,包括道路、街道、学校、公园等内容。

e.在地图中显示实时交通信息示图(当前,全国范围内已支持多个城市实时路况查询,且会陆续开通其他城市。)

  1. // 在地图中显示实时交通信息示
  2. mMapView.setTraffic(true);

复制代码

运行效果图如下:

f.显示卫星图(卫星地图是卫星拍摄的真实的地理面貌,所以卫星地图可用来检测地面的信息,你可以了解到地理位置,地形等。)

  1. // 显示卫星图
  2. mMapView.setSatellite(true);

复制代码

运行效果图如下:

完整代码如下:

  1. package com.android.baidu.map;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.Toast;
  5. import com.baidu.mapapi.BMapManager;
  6. import com.baidu.mapapi.MKGeneralListener;
  7. import com.baidu.mapapi.map.MKEvent;
  8. import com.baidu.mapapi.map.MapController;
  9. import com.baidu.mapapi.map.MapView;
  10. import com.baidu.platform.comapi.basestruct.GeoPoint;
  11. /**
  12. * 基本的地图图层,包括若干个缩放级别,显示基本的地图信息,包括道路、街道、学校、公园等内容。
  13. * @author android_ls
  14. *
  15. */
  16. public class BaiduMapBaseActivity extends Activity {
  17. /**地图引擎管理类*/
  18. private BMapManager mBMapManager = null;
  19. /**显示地图的View*/
  20. private MapView mMapView = null;
  21. /**
  22. * 经研究发现在申请KEY时:应用名称一定要写成my_app_应用名(也就是说"my_app_"是必须要有的)。
  23. * 百度地图SDK提供的服务是免费的,接口无使用次数限制。您需先申请密钥(key),才可使用该套SDK。
  24. * */
  25. public static final String BAIDU_MAP_KEY = "07418AEC69BAAB7104C6230A6120C580DFFAEEBB";
  26. @Override
  27. public void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. // 注意:请在调用setContentView前初始化BMapManager对象,否则会报错
  30. mBMapManager = new BMapManager(this.getApplicationContext());
  31. mBMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {
  32. @Override
  33. public void onGetNetworkState(int iError) {
  34. if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
  35. Toast.makeText(BaiduMapBaseActivity.this.getApplicationContext(),
  36. "您的网络出错啦!",
  37. Toast.LENGTH_LONG).show();
  38. }
  39. }
  40. @Override
  41. public void onGetPermissionState(int iError) {
  42. if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
  43. // 授权Key错误:
  44. Toast.makeText(BaiduMapBaseActivity.this.getApplicationContext(),
  45. "请在 DemoApplication.java文件输入正确的授权Key!",
  46. Toast.LENGTH_LONG).show();
  47. }
  48. }
  49. });
  50. setContentView(R.layout.main);
  51. mMapView = (MapView) this.findViewById(R.id.bmapsView);
  52. // 设置启用内置的缩放控件
  53. mMapView.setBuiltInZoomControls(true);
  54. // 获取地图控制器,可以用它控制平移和缩放
  55. MapController mMapController = mMapView.getController();
  56. // 用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
  57. // 北京天安门的经纬度:39.915 * 1E6,116.404 * 1E6
  58. /* GeoPoint mGeoPoint = new GeoPoint(
  59. (int) (39.915 * 1E6),
  60. (int) (116.404 * 1E6));*/
  61. // 上海市浦东新区的GPS纬度经度值:31.224078,121.540419
  62. GeoPoint mGeoPoint = new GeoPoint(
  63. (int) (31.224078 * 1E6),
  64. (int) (121.540419 * 1E6));
  65. // 设置地图的中心点
  66. mMapController.setCenter(mGeoPoint);
  67. // 设置地图的缩放级别。 这个值的取值范围是[3,18]。
  68. mMapController.setZoom(13);
  69. // 当前,全国范围内已支持多个城市实时路况查询,且会陆续开通其他城市。
  70. // 在地图中显示实时交通信息示
  71. // mMapView.setTraffic(true);
  72. // 卫星地图是卫星拍摄的真实的地理面貌,所以卫星地图可用来检测地面的信息,你可以了解到地理位置,地形等。
  73. // 显示卫星图,屏掉 mMapView.setTraffic(true);这行代码。
  74. mMapView.setSatellite(true);
  75. }
  76. // 重写以下方法,管理API
  77. @Override
  78. protected void onResume() {
  79. mMapView.onResume();
  80. if (mBMapManager != null) {
  81. mBMapManager.start();
  82. }
  83. super.onResume();
  84. }
  85. @Override
  86. protected void onPause() {
  87. mMapView.onPause();
  88. if (mBMapManager != null) {
  89. mBMapManager.stop();
  90. }
  91. super.onPause();
  92. }
  93. @Override
  94. protected void onDestroy() {
  95. mMapView.destroy();
  96. if (mBMapManager != null) {
  97. mBMapManager.destroy();
  98. mBMapManager = null;
  99. }
  100. super.onDestroy();
  101. }
  102. }

复制代码

时间: 2024-10-11 01:08:28

Android百度地图的相关文章

Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

标签: Android百度地图API Key  分类: Android 百度地图开发(2)  最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!   一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/a

android 百度地图开发实例(转载)

因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点android 百度地图开发常用的方法. 1初始化 MapManager mBMapMan = new BMapManager(this);boolean isSuccess = mBMapMan.init(this.mStrKey, new MyGeneralListener()); isSuccess 的值

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了~~~~ 效果图: 好了,可以代码,为了方便,我把所有的按钮都放到了menu菜单中. 1.初次启动定位 [java] view plaincopy /** * 定位的客户端 */ private LocationClient mLocationClient; /** * 定位的监听器 */ public MyLoca

Android百度地图 - 在地图上标注已知GPS纬度经度值的一个或一组覆盖物 - OPEN 开发经验库 - 360安全浏览器 8.1

首页   代码   文档   问答   资讯   经验   GitHub日报 登录   注册 www.open-open.com/libOPEN经验 投稿 全部经验分类  Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim C++ C# JSON Ruby Linux Nginx Docker 所有分类  >  开发语言与工具  >  移动开发  

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

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

转载请标明出处:http://blog.csdn.net/tanzuai/article/details/43835431 目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴,请参考Android 百度地图 SDK v3.3.0 (二)--- 地图定位和图层展示) 百度地图SDK提供三种类型的POI检索:周边检索.区域检索和城市内检索.下面将以城市

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

    最近做android百度地图,但是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--只显示网格而没有显示地图,网络连接和APIKey申请都是正确的,就是不知道为什么不能显示,网上也有很多人遇到这个问题,有的是SDK更新不兼容.而且网上很多百度地图都是使用V2.3.1版本,后来没有办法只有通过baidumapapi_v2_4_1.jar完成显示地图. 其中需要注意的是使用2.3.1时调用manager.init(

Android 百度地图开发之一(Hello BaiDu Map)

之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图开发的准备和地图的成功显示即可. 首先建议大家先申请注册一个百度账号. 申请密钥(要想实现百度地图的相关服务必须申请密钥),网址:http://lbsyun.baidu.com/apiconsole/key 需要注意的是:应用名称不要重复或无效,安全码的输入详情请查看:http://develope

android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索

最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两者合起来先自动获取自己所在位置的经纬度然后与固定地点进行路径搜索时却弄不出来了,因为刚开始 写的两者在两个类中总是取不到经纬度值,后来将两者写到同一个类中去了,终于取到经纬度值了,也运行出来了.需要 在 BDLocationListener的onReceiveLocation里获取到经纬度值,因为已

Android百度地图结合方向传感器我们自己定位哪里走

Android百度地图结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步修改,有兴趣的同学可以研究下怎么修改的 本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了 @一启动就自动定位了 a,MainActivity 中添加定位代码,定位的监听器MyLocationListener b,封装的方向传感器