【2013-10-20】Android应用开发笔记:百度地图Android SDK 的使用
2026/6/25 18:40:14 网站建设 项目流程

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2013-10-20| 标题:Android应用开发笔记:百度地图Android SDK 的使用分类:编程 / android |标签:android·百度地图


Android应用开发笔记:百度地图Android SDK 的使用

    • HelloWorld
      • 1. 申请密钥
      • 2. 添加 so 和 jar 文件
      • 3. 添加权限和代码
    • 更新:将定位信息与百度地图 SDK 结合
    • 更新:百度地图截屏并分享

备忘百度地图 Android SDK 的使用方法。

百度地图 Android SDK 官网:http://developer.baidu.com/map/sdk-android.htm

HelloWorld

1. 申请密钥

步骤与 Android 定位 SDK 相同,此处略。

2. 添加 so 和 jar 文件

将 SDK 包内的libBaiduMapSDK_v2_x.sobaidumapapi_vX_Y_Z.jar放入工程的libs目录(参考百度官方集成图示)。

3. 添加权限和代码

AndroidManifest.xml 权限声明(含定位 SDK 所需权限):

<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permissionandroid:name="android.permission.READ_LOGS"/><uses-permissionandroid:name="android.permission.ACCESS_GPS"/><supports-screensandroid:anyDensity="true"android:largeScreens="true"android:normalScreens="true"android:resizeable="true"android:smallScreens="true"/>

布局文件(添加 MapView 组件):

<com.baidu.mapapi.map.MapViewandroid:id="@+id/bdmapview"android:layout_below="@+id/tv_currloc"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true"/>

Java 成员变量:

privateBMapManagermBMapMan=null;privateMapViewmMapView=null;

onCreate(注意:BMapManager 必须在 setContentView 之前初始化):

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);mBMapMan=newBMapManager(getApplicationContext());mBMapMan.init("YOUR_API_KEY",null);setContentView(R.layout.activity_main);mMapView=(MapView)findViewById(R.id.bdmapview);mMapView.setBuiltInZoomControls(true);MapControllermMapController=mMapView.getController();GeoPointpoint=newGeoPoint((int)(39.915*1E6),(int)(116.404*1E6));mMapController.setCenter(point);mMapController.setZoom(12);}

重写 Activity 生命周期方法:

@OverrideprotectedvoidonDestroy(){mMapView.destroy();if(mBMapMan!=null){mBMapMan.destroy();mBMapMan=null;}super.onDestroy();}@OverrideprotectedvoidonPause(){mMapView.onPause();if(mBMapMan!=null)mBMapMan.stop();super.onPause();}@OverrideprotectedvoidonResume(){mMapView.onResume();if(mBMapMan!=null)mBMapMan.start();super.onResume();}

总结:

  • 百度地图 SDK 文档较全,Demo 介绍详细。
  • 官方 HelloWorld 教程
  • 官方 API 类参考

更新:将定位信息与百度地图 SDK 结合

百度地图 SDK 由多个图层叠加构成,要显示定位信息只需添加定位图层即可。参照官方LocationOverlayDemo.java

publicclassMainActivityextendsActivityimplementsOnClickListener{privatestaticfinalStringTAG="MainActivity";privateLocationClientmLocationClient=null;privateBMapManagermBMapMan=null;privateMapViewmMapView=null;privateMapControllermMapController=null;privateMyLocationOverlaymyLocationOverlay=null;privateLocationDatalocData=null;privateBDLocationListenerbdLocationListener=newBDLocationListener(){@OverridepublicvoidonReceiveLocation(BDLocationlocation){if(location==null)return;locData.latitude=location.getLatitude();locData.longitude=location.getLongitude();locData.accuracy=location.getRadius();locData.direction=location.getDerect();myLocationOverlay.setData(locData);mMapView.refresh();mMapController.animateTo(newGeoPoint((int)(locData.latitude*1e6),(int)(locData.longitude*1e6)));}@OverridepublicvoidonReceivePoi(BDLocationpoiLocation){}};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);mBMapMan=newBMapManager(getApplicationContext());mBMapMan.init("YOUR_API_KEY",null);setContentView(R.layout.activity_main);mMapView=(MapView)findViewById(R.id.bdmapview);mMapView.setBuiltInZoomControls(true);mMapController=mMapView.getController();GeoPointpoint=newGeoPoint((int)(39.915*1E6),(int)(116.404*1E6));mMapController.setCenter(point);mMapController.setZoom(12);locData=newLocationData();myLocationOverlay=newMyLocationOverlay(mMapView);myLocationOverlay.setData(locData);mMapView.getOverlays().add(myLocationOverlay);myLocationOverlay.enableCompass();myLocationOverlay.setLocationMode(LocationMode.COMPASS);mMapView.refresh();}}

定位图层核心流程:新建图层 → 添加到 View → 在定位回调中更新位置信息。

更新:百度地图截屏并分享

MapView.getCurrentMap()可实现截屏,具体步骤如下:

1. 实现 MKMapViewListener 接口:

privateMKMapViewListenermKMapViewListener=newMKMapViewListener(){@OverridepublicvoidonMapMoveFinish(){}@OverridepublicvoidonMapLoadFinish(){}@OverridepublicvoidonMapAnimationFinish(){}@OverridepublicvoidonGetCurrentMap(Bitmaparg0){Bitmaps.writeBitmapToFile(arg0,"/mnt/sdcard/map.png");}@OverridepublicvoidonClickMapPoi(MapPoiarg0){}};

2. 注册接口:

mMapView.regMapViewListener(mBMapMan,mKMapViewListener);

3. 调用截屏:

mMapView.getCurrentMap();

4. 保存 Bitmap 到文件:

publicclassBitmaps{publicstaticbooleanwriteBitmapToFile(Bitmapmap,StringfilePath){if(null==map||null==filePath)returnfalse;FileOutputStreamfileOutputStream=null;try{fileOutputStream=newFileOutputStream(filePath);}catch(FileNotFoundExceptione){e.printStackTrace();returnfalse;}map.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);booleanresult=true;try{fileOutputStream.flush();}catch(IOExceptione){e.printStackTrace();result=false;}try{fileOutputStream.close();}catch(IOExceptione){e.printStackTrace();result=false;}returnresult;}}

5. 分享:

publicclassShareUtils{publicstaticbooleansimpleShare(Contextcontext,Stringtext,StringimagePath){if(null==text||text.trim().length()==0)returnfalse;Intentintent=newIntent(Intent.ACTION_SEND);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.putExtra(Intent.EXTRA_SUBJECT,"share");intent.putExtra(Intent.EXTRA_TITLE,"title");intent.putExtra(Intent.EXTRA_TEXT,text);intent.setType("text/plain");if(imagePath!=null&&imagePath.trim().length()!=0){Filefile=newFile(imagePath.trim());if(file.canRead()){intent.setType("image/*");intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));}}context.startActivity(intent);returntrue;}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询