使用百度地图结合GPS进行定位
2013-08-30 18:04
351 查看
本文在上文基础上加入GPS定位功能,实现实时定位,代码如下:
Activity:
Application类与上文完全一样。
Manifest里面比上文多加一个如下权限:
布局文件也和上文完全一样。
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; @Override protected 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() { @Override public void onLocationChanged(Location location) { updateMap(location); } @Override public void onProviderDisabled(String provider) { updateMap(null); } @Override public void onProviderEnabled(String provider) { updateMap(locationManager .getLastKnownLocation(provider)); } @Override public 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() { @Override public void onMapMoveFinish() { /** * 在此处理地图移动完成回调 缩放,平移等操作完成后,此回调被触发 */ } @Override public 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); } } @Override public void onGetCurrentMap(Bitmap b) { /** * 当调用过 mMapView.getCurrentMap()后,此回调会被触发 可在此保存截图至存储设备 */ } @Override public void onMapAnimationFinish() { /** * 地图完成带动画的操作(如: animationTo())后,此回调被触发 */ } /** * 在此处理地图加载完成事件 */ @Override public void onMapLoadFinish() { Toast.makeText(LocationActivity.this, "地图加载完成", Toast.LENGTH_SHORT).show(); } }; mMapView.regMapViewListener(DemoApplication.getInstance().mBMapManager, mMapListener); } @Override protected void onPause() { /** * MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause() */ mMapView.onPause(); super.onPause(); } @Override protected void onResume() { /** * MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume() */ mMapView.onResume(); super.onResume(); } @Override protected void onDestroy() { /** * MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy() */ mMapView.destroy(); super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protected 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" />
布局文件也和上文完全一样。
相关文章推荐
- 使用百度地图结合GPS进行定位
- 使用百度地图进行区域搜索与定位
- 为何在Google地图、百度地图进行GPS定位时,开启WiFi有助于提高定位速度和精度,可达到20m级别?
- javaweb中使用百度地图进行定位
- 手机端GPS定位结合百度地图实现定位
- 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素。其中By类的常用定位方式共八种,现分别介绍如下
- 使用百度地图进行定位和路线导航
- Android定位(是否使用GPS进行定位)
- 使用百度地图进行区域搜索与定位
- 使用Android原生的Api进行GPS定位获取位置信息
- Android之使用GPS和NetWork定位
- IOS 使用百度地图api 获取gps定位数据
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- 使用GPS经纬度定位附近地点(某一点范围内查询)
- 使用CSS选择器进行元素定位
- 【转】C# 使用Google API进行手机基站定位资料整理
- 用手机gps定位获得准确的百度地图经纬度
- 百度地图 iOS SDK - iOS8下使用百度地图SDK定位的问题
- 使用 Chrome 开发者工具进行 JavaScript 问题定位与调试
- 使用spotligh+sqltuning+loadrunner对数据库性能问题进行定位和分析