【2013-10-20】Android应用开发笔记:百度地图Android SDK 的使用

发布时间:2026/6/25 18:40:21
【2013-10-20】Android应用开发笔记:百度地图Android SDK 的使用 [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2013-10-20 标题Android应用开发笔记百度地图Android SDK 的使用分类编程 / android 标签android·百度地图Android应用开发笔记百度地图Android SDK 的使用HelloWorld1. 申请密钥2. 添加 so 和 jar 文件3. 添加权限和代码更新将定位信息与百度地图 SDK 结合更新百度地图截屏并分享备忘百度地图 Android SDK 的使用方法。百度地图 Android SDK 官网http://developer.baidu.com/map/sdk-android.htmHelloWorld1. 申请密钥步骤与 Android 定位 SDK 相同此处略。2. 添加 so 和 jar 文件将 SDK 包内的libBaiduMapSDK_v2_x.so和baidumapapi_vX_Y_Z.jar放入工程的libs目录参考百度官方集成图示。3. 添加权限和代码AndroidManifest.xml 权限声明含定位 SDK 所需权限uses-permissionandroid:nameandroid.permission.ACCESS_COARSE_LOCATION/uses-permissionandroid:nameandroid.permission.ACCESS_FINE_LOCATION/uses-permissionandroid:nameandroid.permission.ACCESS_WIFI_STATE/uses-permissionandroid:nameandroid.permission.ACCESS_NETWORK_STATE/uses-permissionandroid:nameandroid.permission.CHANGE_WIFI_STATE/uses-permissionandroid:nameandroid.permission.READ_PHONE_STATE/uses-permissionandroid:nameandroid.permission.WRITE_EXTERNAL_STORAGE/uses-permissionandroid:nameandroid.permission.INTERNET/uses-permissionandroid:nameandroid.permission.MOUNT_UNMOUNT_FILESYSTEMS/uses-permissionandroid:nameandroid.permission.READ_LOGS/uses-permissionandroid:nameandroid.permission.ACCESS_GPS/supports-screensandroid:anyDensitytrueandroid:largeScreenstrueandroid:normalScreenstrueandroid:resizeabletrueandroid:smallScreenstrue/布局文件添加 MapView 组件com.baidu.mapapi.map.MapViewandroid:idid/bdmapviewandroid:layout_belowid/tv_currlocandroid:layout_widthfill_parentandroid:layout_heightfill_parentandroid:clickabletrue/Java 成员变量privateBMapManagermBMapMannull;privateMapViewmMapViewnull;onCreate注意BMapManager 必须在 setContentView 之前初始化OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);mBMapMannewBMapManager(getApplicationContext());mBMapMan.init(YOUR_API_KEY,null);setContentView(R.layout.activity_main);mMapView(MapView)findViewById(R.id.bdmapview);mMapView.setBuiltInZoomControls(true);MapControllermMapControllermMapView.getController();GeoPointpointnewGeoPoint((int)(39.915*1E6),(int)(116.404*1E6));mMapController.setCenter(point);mMapController.setZoom(12);}重写 Activity 生命周期方法OverrideprotectedvoidonDestroy(){mMapView.destroy();if(mBMapMan!null){mBMapMan.destroy();mBMapMannull;}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.javapublicclassMainActivityextendsActivityimplementsOnClickListener{privatestaticfinalStringTAGMainActivity;privateLocationClientmLocationClientnull;privateBMapManagermBMapMannull;privateMapViewmMapViewnull;privateMapControllermMapControllernull;privateMyLocationOverlaymyLocationOverlaynull;privateLocationDatalocDatanull;privateBDLocationListenerbdLocationListenernewBDLocationListener(){OverridepublicvoidonReceiveLocation(BDLocationlocation){if(locationnull)return;locData.latitudelocation.getLatitude();locData.longitudelocation.getLongitude();locData.accuracylocation.getRadius();locData.directionlocation.getDerect();myLocationOverlay.setData(locData);mMapView.refresh();mMapController.animateTo(newGeoPoint((int)(locData.latitude*1e6),(int)(locData.longitude*1e6)));}OverridepublicvoidonReceivePoi(BDLocationpoiLocation){}};OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);mBMapMannewBMapManager(getApplicationContext());mBMapMan.init(YOUR_API_KEY,null);setContentView(R.layout.activity_main);mMapView(MapView)findViewById(R.id.bdmapview);mMapView.setBuiltInZoomControls(true);mMapControllermMapView.getController();GeoPointpointnewGeoPoint((int)(39.915*1E6),(int)(116.404*1E6));mMapController.setCenter(point);mMapController.setZoom(12);locDatanewLocationData();myLocationOverlaynewMyLocationOverlay(mMapView);myLocationOverlay.setData(locData);mMapView.getOverlays().add(myLocationOverlay);myLocationOverlay.enableCompass();myLocationOverlay.setLocationMode(LocationMode.COMPASS);mMapView.refresh();}}定位图层核心流程新建图层 → 添加到 View → 在定位回调中更新位置信息。更新百度地图截屏并分享MapView.getCurrentMap()可实现截屏具体步骤如下1. 实现 MKMapViewListener 接口privateMKMapViewListenermKMapViewListenernewMKMapViewListener(){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(nullmap||nullfilePath)returnfalse;FileOutputStreamfileOutputStreamnull;try{fileOutputStreamnewFileOutputStream(filePath);}catch(FileNotFoundExceptione){e.printStackTrace();returnfalse;}map.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);booleanresulttrue;try{fileOutputStream.flush();}catch(IOExceptione){e.printStackTrace();resultfalse;}try{fileOutputStream.close();}catch(IOExceptione){e.printStackTrace();resultfalse;}returnresult;}}5. 分享publicclassShareUtils{publicstaticbooleansimpleShare(Contextcontext,Stringtext,StringimagePath){if(nulltext||text.trim().length()0)returnfalse;IntentintentnewIntent(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!nullimagePath.trim().length()!0){FilefilenewFile(imagePath.trim());if(file.canRead()){intent.setType(image/*);intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));}}context.startActivity(intent);returntrue;}}