鱼C论坛

 找回密码
 立即注册
查看: 3848|回复: 10

[原创]android学习之百度地图

[复制链接]
发表于 2014-11-28 17:33:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
本帖最后由 青玄 于 2014-11-28 17:40 编辑

本案例是实现大致的百度地图的效果!首先需要下载百度地图的sdk与api,在下载之前应该申请一个密钥:http://developer.baidu.com/map/i ... ndroidsdk/guide/key然后就可以下载了:http://lbsyun.baidu.com/sdk/download
接下来只需要以下几步就可以完成一个简单的地图显示:
工程配置

第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;

注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发者可根据实际需求自行添加。


                               
登录/注册后可看大图

第二步:在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。

通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。

注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:

1. 在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;

2. Project -> clean-> clean all .

显示百度地图

百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:

第一步:创建并配置工程(具体方法参见工程配置部分的介绍);

第二步:在AndroidManifest中添加开发密钥、所需权限等信息;

(1)在application中添加开发密钥

  1. <application>     
  2. <meta-data          android:name="com.baidu.lbsapi.API_KEY"          android:value="开发者 key" />
  3. </application>
复制代码

2)添加所需权限

  1. <uses-permission android:name="android.permission.GET_ACCOUNTS" />  <uses-permission android:name="android.permission.USE_CREDENTIALS" />  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  <uses-permission android:name="android.permission.INTERNET" />  <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  <uses-permission android:name="android.permission.ACCESS_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.BROADCAST_STICKY" />  <uses-permission android:name="android.permission.WRITE_SETTINGS" />  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
复制代码


第三步,在布局xml文件中添加地图控件;

  1. <font color="#000000"><com.baidu.mapapi.map.MapView      android:id="@+id/bmapView"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:clickable="true" /></font>
复制代码



第四步,在应用程序创建时初始化 SDK引用的Context 全局变量:

  1. public class MainActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);   
  5.         //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
  6.         //注意该方法要再setContentView方法之前实现  
  7.         SDKInitializer.initialize(getApplicationContext());  
  8.         setContentView(R.layout.activity_main);  
  9.     }  
  10. }
复制代码



注意:在SDK各功能组件使用之前都需要调用

SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中

第五步,创建地图Activity,管理地图生命周期;

  1. <font face="微软雅黑, Helvetica, Arial, sans-serif"><font style="font-size: 12px"><font color="#000000">public class MainActivity extends Activity {  
  2.     MapView mMapView = null;  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);   
  6.         //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
  7.         //注意该方法要再setContentView方法之前实现  
  8.         SDKInitializer.initialize(getApplicationContext());  
  9.         setContentView(R.layout.activity_main);  
  10.         //获取地图控件引用  
  11.         mMapView = (MapView) findViewById(R.id.bmapView);  
  12.     }  
  13.     @Override  
  14.     protected void onDestroy() {  
  15.         super.onDestroy();  
  16.         //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
  17.         mMapView.onDestroy();  
  18.     }  
  19.     @Override  
  20.     protected void onResume() {  
  21.         super.onResume();  
  22.         //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
  23.         mMapView.onResume();  
  24.         }  
  25.     @Override  
  26.     protected void onPause() {  
  27.         super.onPause();  
  28.         //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
  29.         mMapView.onPause();  
  30.         }  </font>
  31. <font color="#626262">    }</font></font></font>
复制代码




地图类型

百度地图Android SDK为您提供了两种类型的地图资源(普通矢量地图和卫星图),开发者可以利用BaiduMap中的mapType()方法来设置地图类型。核心代码如下:

  1. mMapView = (MapView) findViewById(R.id.bmapView);  mBaiduMap = mMapView.getMap();  //普通地图  mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);  //卫星地图  mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
复制代码

activity程序的整个代码
  1. <font color="#000000">package com.example.baidu_map;

  2. import com.baidu.mapapi.SDKInitializer;
  3. import com.baidu.mapapi.map.BaiduMap;
  4. import com.baidu.mapapi.map.BaiduMap.OnMarkerDragListener;
  5. import com.baidu.mapapi.map.BitmapDescriptor;
  6. import com.baidu.mapapi.map.BitmapDescriptorFactory;
  7. import com.baidu.mapapi.map.MapView;
  8. import com.baidu.mapapi.map.Marker;
  9. import com.baidu.mapapi.map.MarkerOptions;
  10. import com.baidu.mapapi.map.OverlayOptions;
  11. import com.baidu.mapapi.model.LatLng;

  12. import android.os.Bundle;
  13. import android.app.Activity;
  14. import android.view.Menu;

  15. public class MainActivity extends Activity {
  16.           MapView mMapView = null;
  17.           BaiduMap mBaiduMap;
  18.         @Override
  19.         protected void onCreate(Bundle savedInstanceState) {
  20.                 super.onCreate(savedInstanceState);
  21.                 //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
  22.         //注意该方法要再setContentView方法之前实现  
  23.         SDKInitializer.initialize(getApplicationContext());
  24.                 setContentView(R.layout.activity_main);
  25.                 mMapView = (MapView) findViewById(R.id.bmapView);
  26.                 mBaiduMap = mMapView.getMap();  
  27.                 //普通地图  
  28.                 //mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);  
  29.                 //卫星地图  
  30.                 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
  31.                 mBaiduMap.setTrafficEnabled(true);
  32.                
  33.                 //定义Maker坐标点  
  34.                 LatLng point = new LatLng(39.963175, 116.400244);  
  35.                 //构建Marker图标  
  36.                 BitmapDescriptor bitmap = BitmapDescriptorFactory  
  37.                     .fromResource(R.drawable.biao);  
  38.                 //构建MarkerOption,用于在地图上添加Marker  
  39.                 OverlayOptions option = new MarkerOptions()  
  40.                     .position(point)  
  41.                     .icon(bitmap)
  42.                     .zIndex(9)
  43.                     .draggable(true);  
  44.                 //在地图上添加Marker,并显示  
  45.                 mBaiduMap.addOverlay(option);
  46.                 mBaiduMap.setOnMarkerDragListener(new OnMarkerDragListener() {
  47.                     public void onMarkerDrag(Marker marker) {
  48.                         //拖拽中
  49.                     }
  50.                     public void onMarkerDragEnd(Marker marker) {
  51.                         //拖拽结束
  52.                     }
  53.                     public void onMarkerDragStart(Marker marker) {
  54.                         //开始拖拽
  55.                     }
  56.                 });
  57.         }
  58.         @Override
  59.         protected void onDestroy() {
  60.                 // TODO Auto-generated method stub
  61.                 super.onDestroy();
  62.                 //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
  63.         mMapView.onDestroy();  
  64.         }
  65.         @Override
  66.         protected void onPause() {
  67.                 // TODO Auto-generated method stub
  68.                 super.onPause();
  69.                 //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
  70.         mMapView.onPause();
  71.         }
  72.         @Override
  73.         protected void onResume() {
  74.                 // TODO Auto-generated method stub
  75.                 super.onResume();
  76.                  //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
  77.         mMapView.onResume();
  78.         }
  79.         
  80.         
  81. }</font><font color="#0a8021">
  82. </font>
复制代码



普通地图效果
QQ截图20141128171325.png

卫星地图效果



QQ截图20141128171550.png






评分

参与人数 2荣誉 +10 鱼币 +10 贡献 +8 收起 理由
qingchen + 2 + 2 叼叼叼叼啊
小甲鱼 + 8 + 8 + 8 热爱鱼C^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-28 17:48:39 | 显示全部楼层
哈哈,你总算发对位置了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-28 18:02:52 | 显示全部楼层
强烈支持哦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-28 18:13:17 | 显示全部楼层
黑夜 发表于 2014-11-28 17:48
哈哈,你总算发对位置了

呵呵! 黑夜老兄!那次真是不好意思!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-28 18:20:43 | 显示全部楼层
看来同学的毕设有着落了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-28 18:22:42 | 显示全部楼层
压寨宝宝 发表于 2014-11-28 18:20
看来同学的毕设有着落了

额! 好吧!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-29 11:53:35 | 显示全部楼层
哇塞,都出了这么多了,支持青玄童鞋~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-29 11:58:56 | 显示全部楼层
黑夜 发表于 2014-11-28 17:48
哈哈,你总算发对位置了

其实应该发在《移动开发交流》才对吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-29 14:49:58 | 显示全部楼层
小甲鱼 发表于 2014-11-29 11:58
其实应该发在《移动开发交流》才对吧?

哦!嘿嘿!不好意思啊! 甲鱼大哥!小弟没有找到!还麻烦甲鱼大哥帮我移动了!以后多多注意!^_^!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-2 22:17:03 | 显示全部楼层
             支持!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-19 09:36:06 | 显示全部楼层
{:1_1:}好厉害的样子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表