当前位置: 代码迷 >> Android >> android中实现百度map
  详细解决方案

android中实现百度map

热度:12   发布时间:2016-05-01 13:23:35.0
android中实现百度地图

android实现GPS定位

??? 实现GPS定位功能主要是引入百度地图的包import com.baidu.mapapi

???
??? 要引入则需要先下载百度地图移动版API开发包由于下载过程较为繁琐;我这里将提供现成的压缩文件

??? 如果需要,可以自由下载;

??? 得到API开发包后还要得到密钥,即Key;为方便大家学习,这里也将提供自由的Key;

??
只需将这密钥复制到后面的代码上就可以了(22FCFCD052AAAE640F34D608D98CDED68B0744A5)



??? 嗯,现在我们可以准备创建android项目了;创建好项目后、将APi开发包中的baidumap.jar文件引入
??? 到项目名下;其步骤是:右键项目名,找到Properties,在目录下找到->java Build Path-接着在

??? >Libraries中选择"Add JARs",找到并选定baidumapapi.jar;这样就可以使用API了。

???
???
??? 由于版本不同的原因、有些项目里面没有libs文件夹,如果有的话就不用新建了;然后再将
??? baidumap.jar文件复制到libs文件中、还要将libBMapApiEngine_v1_3_3.so复制到工程目录下的libs
??? \armeabi。


? 在敲入代码之前、我们需要增加地图的使用权限;在Mainfest中、增加使用者的权限:

其代码是:


Java代码 复制代码?收藏代码
  1. <uses-permission?android:name="android.permission.ACCESS_NETWORK_STATE"?> ??
  2. ????</uses-permission> ??
  3. ????<uses-permission?android:name="android.permission.ACCESS_FINE_LOCATION"?> ??
  4. ????</uses-permission> ??
  5. ????<uses-permission?android:name="android.permission.INTERNET"?> ??
  6. ????</uses-permission> ??
  7. ????<uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"?> ??
  8. ????</uses-permission> ??
  9. ????<uses-permission?android:name="android.permission.ACCESS_WIFI_STATE"?> ??
  10. ????</uses-permission> ??
  11. ????<uses-permission?android:name="android.permission.CHANGE_WIFI_STATE"?> ??
  12. ????</uses-permission> ??
  13. ????<uses-permission?android:name="android.permission.READ_PHONE_STATE"?> ??
  14. ????</uses-permission>??
<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>




有些版本中需要在mainfest中增加android权限、但我的就不需要增加;如果需要;可以试

试下面的代码;

Java代码 复制代码?收藏代码
  1. <com.baidu.mapapi.MapView ??
  2. ???????android:id="@+id/bmapView"??
  3. ???????android:layout_width="fill_parent"??
  4. ???????android:layout_height="fill_parent"??
  5. ???????android:clickable="true"?/>??
 <com.baidu.mapapi.MapView        android:id="@+id/bmapView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:clickable="true" />





接着便是写主函数Activity的类了,其继承MapActivity的类、

先声明需要的对象:

Java代码 复制代码?收藏代码
  1. ????????BMapManager?mBMapMan=null;//地图管理者?? ??
  2. MapView?bMapView;//视图?? ??
  3. LocationListener?locationlistener;//位置动作监听器?? ??
  4. MyLocationOverlay?mLocationOverlay;//地图覆盖物???
         BMapManager mBMapMan=null;//地图管理者  	MapView bMapView;//视图  	LocationListener locationlistener;//位置动作监听器  	MyLocationOverlay mLocationOverlay;//地图覆盖物 




然后,在主函数中创建百度地图的主对象;调用使用密钥参数的方法;接着初始化视图和找到空间视图。

Java代码 复制代码?收藏代码
  1. //创建百度地图管理者 ??
  2. ????????mBMapMan=new?BMapManager(getApplication()); ??
  3. ????????mBMapMan.init("22FCFCD052AAAE640F34D608D98CDED68B0744A5",null); ??
  4. //第一个参数就是你申请的key码 ??
  5. ????????super.initMapActivity(mBMapMan);//初始化百度地图? ??
  6. ????????bMapView=(MapView)findViewById(R.id.bmapView);//找到控件视图??
//创建百度地图管理者        mBMapMan=new BMapManager(getApplication());        mBMapMan.init("22FCFCD052AAAE640F34D608D98CDED68B0744A5",null);//第一个参数就是你申请的key码        super.initMapActivity(mBMapMan);//初始化百度地图         bMapView=(MapView)findViewById(R.id.bmapView);//找到控件视图



接着设置内置的缩放控件和控件视图的控制权;

Java代码 复制代码?收藏代码
  1. bMapView.setBuiltInZoomControls(true);//设置启动内置的缩放控件? ??
  2. ????????MapController?mMapController?=bMapView.getController();//得到bMapView的控制权,??
bMapView.setBuiltInZoomControls(true);//设置启动内置的缩放控件         MapController mMapController =bMapView.getController();//得到bMapView的控制权,



设置一个经纬度、然后将此坐标作为地图的中心位置;顺便还要设置地图的大小的级别。


Java代码 复制代码?收藏代码
  1. //给定一个经纬度构造一个GeoPoint?,单位是微度(度*1E6) ??
  2. ????????GeoPoint?point=new?GeoPoint?((int)(39.915*1E6),(int)(116.404*1E6));?? ??
  3. ????????mMapController.setCenter(point);//设置地图中心点 ??
  4. ????????mMapController.setZoom(12);//设置地图zoom级别 ??
  5. ????????//获取当前位置的覆盖物?? ??
  6. ????????mLocationOverlay=new?MyLocationOverlay(this,bMapView);?? ??
  7. ????????//添加定位覆盖物?? ??
  8. ????????bMapView.getOverlays().add(mLocationOverlay);???
//给定一个经纬度构造一个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); 




定义位置监听器、获取地图位置

Java代码 复制代码?收藏代码
  1. //定义位置监听器?? ??
  2. ????????locationlistener=new?LocationListener()?{?? ??
  3. ????????????public?void?onLocationChanged(Location?location)?{?? ??
  4. ????????????????//当位置改变时,获取当前经纬度?? ??
  5. ????????????????if?(location?!=?null){?? ??
  6. ???????????????????//获取位置经纬度?? ??
  7. ????????????????????GeoPoint?pt?=?new?GeoPoint((int)(location.getLatitude()*1e6),?? ??
  8. ???????????????????????????(int)(location.getLongitude()*1e6));?? ??
  9. ????????????????????//将视图中心定位到所在经纬度?? ??
  10. ????????????????????bMapView.getController().animateTo(pt);?? ??
  11. ????????????????}?? ??
  12. ???????????}?? ??
  13. ???????????? ??
  14. ????????};??
//定义位置监听器          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);                  }             }                      };





根据管理者、更新地图位置

Java代码 复制代码?收藏代码
  1. protected?void?onResume(){?? ??
  2. ????????????//?获取位置管理者,视图根据位置监听更新位置?? ??
  3. ????????????mBMapMan.getLocationManager().requestLocationUpdates(locationlistener);?? ??
  4. ????????????//打开定位图标?? ??
  5. ???????????mLocationOverlay.enableMyLocation();?? ??
  6. ????????????//?打开指南针?? ??
  7. ????????????mLocationOverlay.enableCompass();?? ??
  8. ????????????//启动管理着?? ??
  9. ????????????mBMapMan.start();?? ??
  10. ????????????super.onResume();?? ??
  11. ???}??
 protected void onResume(){      	        // 获取位置管理者,视图根据位置监听更新位置      	        mBMapMan.getLocationManager().requestLocationUpdates(locationlistener);      	        //打开定位图标      	       mLocationOverlay.enableMyLocation();      	        // 打开指南针      	        mLocationOverlay.enableCompass();      	        //启动管理着      	        mBMapMan.start();      	        super.onResume();      }



这样、android百度地图就可以在手机上实现了。。。如果还有报错话、那就是主函数中要求添加一个判断方法;此方法不需要重写;其作用目前还不清楚。。。

由于文件上传有问题,所以这里提供下载的地址;
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


  相关解决方案