本文在上文基础上加入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; @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进行定位的更多相关文章

  1. 如何利用【百度地图API】进行定位?非GPS定位

    原文:如何利用[百度地图API]进行定位?非GPS定位 如果你可以上网,如果你有火狐浏览器,那么恭喜你.你能很容易使用以下代码进行定位! ------------------------------- ...

  2. HTML5调用百度地图API进行地理定位实例

    自从HTML5的标准确定以后,越来越多的网站使用HTML5来进行开发.虽然对HTML5支持的浏览器不是很多,但是依然抵挡不了大伙对HTML5开发的热情.今天为大家带来的是使用HTML5调用百度地图AP ...

  3. Arcgis andoid开发之应用百度地图接口实现精准定位与显示

    怀着激动.兴奋的心情,在这个漫天柳絮的季节写下了这片博文,为什么呢,因为困扰我很久的一个技术性的问题得到了解决,发次博文,供大家参观.学习,同时,也以慰藉我长期困扰的心情,好了,废话不再,言归正传,看 ...

  4. 我的Android开发之路——百度地图开源工具获取定位信息

    定位技术在现在的移动设备上是必不可少的,许多app都会使用定位功能. 通常定位方式有两种:GPS定位:网络定位. Android系统对这两种定位方式都提供了相应的API支持,但是因为google的网络 ...

  5. 百度地图API的IP定位城市和浏览器定位(转)

    百度地图API提供了Geolocation 和 LocalCity两个服务类. 这俩API可以分别供用户在JavaScript中进行定位和城市确认. 1 本质上,Geolocation这个类是使用了支 ...

  6. 百度地图js根据经纬度定位和拖动定位点

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  7. 完整版百度地图点击列表定位到对应位置并有交互动画效果demo

    1.前言 将地图嵌入到项目中的需求很多,好吧,我一般都是用的百度地图.那么今天就主要写一个完整的demo.展示一个列表,点击列表的任一内容,在地图上定位到该位置,并有动画效果.来来来,直接上demo  ...

  8. 使用百度地图开发一个导航定位demo-android学习之旅(77)

    首先介绍如何导入百度地图 步骤(其实官方文档写的很清楚了)http://developer.baidu.com/map/index.php?title=androidsdk/guide/introdu ...

  9. angularjs_百度地图API_根据经纬度定位_示例

    百度API--Demo地址:   http://lbsyun.baidu.com/jsdemo.htm#i8_4 本例是在angular.js使用的百度地图根据经纬度定位的API:(正常的页面写法基本 ...

随机推荐

  1. 一种基于Storm的可扩展即时数据处理架构思考

    问题引入 使用storm可以方便的构建一种集群式的数据框架,并通过定义topo来实现业务逻辑. 但使用topo存在一个缺点, topo的处理能力来自于其启动时设置的worker数目,在很多情况下,我们 ...

  2. UVa 540 (团体队列) Team Queue

    题意: 每个人都属于一个团体,在排队的时候,如果他所在的团体有人在队伍中,则他会站到这个团体的最后.否则站到整个队伍的队尾. 输出每次出队的人的编号. 分析: 容易看出,长队中,在同一个团体的人是排在 ...

  3. Zepto picLazyLoad Plugin,图片懒加载的Zepto插件

    嗯,学着国外人起名字Zepto picLazyLoad Plugin确实看起来高大上,其实js代码没几句,而且我每次写js都捉襟见肘,泪奔--- 图片懒加载有很多js插件,非常著名的属jQuery的L ...

  4. 陈正冲老师对于c语言野指针的解释

    那到底什么是野指针呢?怎么去理解这个“野”呢?我们先看别的两个关于“野”的词: 野孩子:没人要,没人管的孩子:行为动作不守规矩,调皮捣蛋的孩子.野狗:没有主人的狗,没有链子锁着的狗,喜欢四处咬人. 对 ...

  5. (五)学习CSS之line-height属性

    参考:http://www.jb51.net/w3school/css/pr_dim_line-height.htm line-height 属性设置行间的距离(行高). 注释:不允许使用负值. 值 ...

  6. class属性添加多个类

    <html> <head> <style type="text/css"> h1.intro { color:blue; text-align: ...

  7. SDUT 3258 Square Number 简单数学

    和上一题一样,把平方因子除去,然后对应的数就变成固定的 #include <cstdio> #include <iostream> #include <algorithm ...

  8. JVM的GC机制及JVM的调优方法

    内存管理和垃圾回收是JVM非常关键的点,对Java性能的剖析而言,了解内存管理和垃圾回收的基本策略非常重要. 1.在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的 ...

  9. HDU 4283 You Are the One (12年天津 区间DP)

    题意:有一个队列,每个人有一个愤怒值a[i],如果他是第k个上场,不开心指数就为(k-1)*a[i].但是边上有一个小黑屋(其实就是个堆栈),可以一定程度上调整上场程序 思路:枚举区间和每个人第几个上 ...

  10. Codeforces 603A Alternative Thinking

    题意:给你一个01串,必须替换一次,且替换的为子串.问换完后,最大01串长度. #include <bits/stdc++.h> typedef long long ll; using n ...