一、首先电脑上必须搭建好java环境平台、创建好eclipse运行环境和搭建好android运行环境。
二、登录http://dev.baidu.com/wiki/static/imap/key/网站,然后按照上面的要求就可以得到android Api Key(key在初始化地图的时候要用到)(Api是免费的)和api开发包、
三、创建android新项目
引入api开发包中的baidumap.jar文件引入到项目中
具体操作:右键项目名,找到Properties,在目录下找到->java Build Path-接着在>Libraries中选择"Add JARs",找到并选定baidumapapi.jar确定后返回,这样就可以在自己的项目中使用百度地图API了。
同时在工程里新建libs文件夹(要是本来就有就不用新建了,由于eclipse版本不一样,有的有,有的没有),然后把baidumap.jar这个文件弄到libs文件夹里,将libBMapApiEngine_v1_3_3.so复制到工程目录下的libs\armeabi。
做好了这些前期工作便可可以开始实现百度地图了、
1、增加使用权限
使用百度地图是要用到网络通信的,所以我们必须的开启一些必要的权限。在Mainfest中添加使用权限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission>
2、在Mainfest中添加android版本支持
<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:rresizeable="true" anddroid:anyDensity="true"/> <uses_sdk android:minSdkVersion="3"></uses_sdk>
这里可能会出错、具体导致的原因我还不是很清楚、要是出错、可以先不写版本支持。同样可以实现、
3、布局文件中添加入地图面板也就是百度地图
<com.baidu.mapapi.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
4、创建一个Activity,并且继承com.baidu.mapapi.MapActivity,因为我们是对百度地图操作,其实质是我们重写他原有的Activity。
public class MainActivity extends MapActivity { BMapManager mBMapMan=null;//地图管理者 MapView bMapView;//视图 LocationListener locationlistener;//位置动作监听器 MyLocationOverlay mLocationOverlay;//地图覆盖物 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBMapMan=new BMapManager(getApplication());//创建百度地图管理者 mBMapMan.init("你申请的key所对应的编码",null);//第一个参数就是你申请的key码 super.initMapActivity(mBMapMan);//初始化百度地图 bMapView=(MapView)findViewById(R.id.bmapView);//找到控件视图 bMapView.setBuiltInZoomControls(true);//设置启动内置的缩放控件 MapController mMapController =bMapView.getController();//得到bMapView的控制权, //给定一个经纬度构造一个GeoPoint ,单位是微度(度*1E6) GeoPoint point=new GeoPoint ((int)(39.915*1E6),(int)(116.404*1E6)); mMapController.setCenter(point);//设置地图中心点 mMapController.setZoom(12);//设置地图zoom级别 //获取当前位置的覆盖物 mLocationOverlay=new MyLocationOverlay(this,bMapView); //添加定位覆盖物 bMapView.getOverlays().add(mLocationOverlay);
上面涉及到的地图管理者:就是一个BMapManager类,地图、定位、搜索功能都需要BMapManager来管理,BMapManager提供四个接口,init, start, stop, destroy。建议在Application里生成BMapManager对象并初使化,在程序退出时调用destory,在需要使用sdk功能的activity的onCreate里调用start, onDestroy调用stop,或者onResume/onPause分别调用start和stop。
地图覆盖物是指覆盖或叠加到地图上的内容,比如一些图标,坐标什么的。比如定位图标就是一个覆盖物、
MapView就是整张的地图
这样上面只哟调用mBMapMan.start()方法启动管理者,便可以显示百度地图了。
接下来实现定位
//定义位置监听器 locationlistener=new LocationListener() { public void onLocationChanged(Location location) { //当位置改变时,获取当前经纬度 if (location != null){ //获取位置经纬度 GeoPoint pt = new GeoPoint((int)(location.getLatitude()*1e6), (int)(location.getLongitude()*1e6)); //将视图中心定位到所在经纬度 bMapView.getController().animateTo(pt); } } };
protected void onResume(){ // 获取位置管理者,视图根据位置监听更新位置 mBMapMan.getLocationManager().requestLocationUpdates(locationlistener); //打开定位图标 mLocationOverlay.enableMyLocation(); // 打开指南针 mLocationOverlay.enableCompass(); //启动管理着 mBMapMan.start(); super.onResume(); }
这样就实现了定位了、
调用地图MapVie对象的方法
可以显示交通路线图
//显示交通路线 bMapView.setTraffic(true);
卫星图
//显示卫星图 bMapView.setSatellite(true);[/size]