首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

使用百度map结合GPS进行定位

2013-10-08 
使用百度地图结合GPS进行定位本文在上文基础上加入GPS定位功能,实现实时定位,代码如下:Activity:package c

使用百度地图结合GPS进行定位

本文在上文基础上加入GPS定位功能,实现实时定位,代码如下:

Activity:

package com.home;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.map.MKMapViewListener;import com.baidu.mapapi.map.MapController;import com.baidu.mapapi.map.MapPoi;import com.baidu.mapapi.map.MapView;import com.baidu.platform.comapi.basestruct.GeoPoint;public class LocationActivity extends Activity {/** 定义LocationManager对象 */private LocationManager locationManager;/** 定义当前Location对象 */private Location currentLocation;/** 显示地图的View */private MapView mMapView = null;/** * 用MapController完成地图控制 */private MapController mMapController = null;/** * MKMapViewListener 用于处理地图事件回调 */MKMapViewListener mMapListener = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/** * 使用地图sdk前需先初始化BMapManager. BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建, * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁 */DemoApplication app = (DemoApplication) this.getApplication();if (app.mBMapManager == null) {app.mBMapManager = new BMapManager(this);/** * 如果BMapManager没有初始化则初始化BMapManager */app.mBMapManager.init(DemoApplication.strKey,new DemoApplication.MyGeneralListener());}setContentView(R.layout.main);init();}/** * 初始化 */private void init() {// 获取系统LocationManager服务locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);// // 从GPS获取最近的定位信息currentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);// 绑定监听,有4个参数// 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种// 参数2,位置信息更新周期,单位毫秒// 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息// 参数4,监听// 备注:对于参数2和3:若参数3不为0,则以参数3为准;若参数3为0,则通过时间来定时更新;两者为0,则随时刷新locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2,1, new LocationListener() {@Overridepublic void onLocationChanged(Location location) {updateMap(location);}@Overridepublic void onProviderDisabled(String provider) {updateMap(null);}@Overridepublic void onProviderEnabled(String provider) {updateMap(locationManager.getLastKnownLocation(provider));}@Overridepublic void onStatusChanged(String provider, int status,Bundle extras) {}});initMap();}/** * 初始化地图 */private void initMap() {mMapView = (MapView) findViewById(R.id.main_bmapView);/** * 获取地图控制器 */mMapController = mMapView.getController();/** * 设置地图是否响应点击事件 . */mMapController.enableClick(true);/** * 设置地图缩放级别 */mMapController.setZoom(12);double cLat = 39.945;double cLon = 116.404;// 如果未能定位则设置默认中心点为天安门GeoPoint p = new GeoPoint((int) (cLat * 1E6), (int) (cLon * 1E6));mMapController.setCenter(p);updateMap(currentLocation);mMapListener = new MKMapViewListener() {@Overridepublic void onMapMoveFinish() {/** * 在此处理地图移动完成回调 缩放,平移等操作完成后,此回调被触发 */}@Overridepublic void onClickMapPoi(MapPoi mapPoiInfo) {/** * 在此处理底图poi点击事件 显示底图poi名称并移动至该点 设置过: * mMapController.enableClick(true); 时,此回调才能被触发 *  */String title = "";if (mapPoiInfo != null) {title = mapPoiInfo.strText;Toast.makeText(LocationActivity.this, title,Toast.LENGTH_SHORT).show();mMapController.animateTo(mapPoiInfo.geoPt);}}@Overridepublic void onGetCurrentMap(Bitmap b) {/** * 当调用过 mMapView.getCurrentMap()后,此回调会被触发 可在此保存截图至存储设备 */}@Overridepublic void onMapAnimationFinish() {/** * 地图完成带动画的操作(如: animationTo())后,此回调被触发 */}/** * 在此处理地图加载完成事件 */@Overridepublic void onMapLoadFinish() {Toast.makeText(LocationActivity.this, "地图加载完成",Toast.LENGTH_SHORT).show();}};mMapView.regMapViewListener(DemoApplication.getInstance().mBMapManager,mMapListener);}@Overrideprotected void onPause() {/** * MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause() */mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {/** * MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume() */mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {/** * MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy() */mMapView.destroy();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}/** * 更新地图 */private void updateMap(Location location) {if (location != null) {// 纬度double latitude = location.getLatitude();// 经度double longitude = location.getLongitude();GeoPoint p = new GeoPoint((int) (latitude * 1E6),(int) (longitude * 1E6));mMapController.setCenter(p);}}}

 

Application类与上文完全一样。

Manifest里面比上文多加一个如下权限:

 <!-- 使用GPS需要的权限 -->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

布局文件也和上文完全一样。
附上图片效果:

使用百度map结合GPS进行定位

热点排行