时下LBS 是最热门的话题,前段时间,公司有个 LBS 项目,要求用到地图导航和定位,就研究了下地图和定位。
android 类库中, 虽然已经提供了几种定位方式,但是从提供的功能和反应速度上,和其他的第三方定位库相比,还是相形见绌。
搜索了几个第三方定位和地图的API平台,综合考虑了下,选择了百度地图。(第三方地图API的选择,具体还要根据自己的项目要求来选择)
言归正传,现在就说说百度的定位API 吧 (该文章,主要是讲定位的,所以就单独说说,百度的定位API 接口)
百度定位API,是 GPS+基站+WIFI+IP混合定位,传感器辅助定位 ,具有 定位方式多,反应时间快等特点(具体的可以搜索一下“百度地图定位API”),下面就讲讲如何实现定时的去定位从而获取实时的定位经纬度。
实现要求:
LBS应用中,缺少不了定位,但是有时,由于网络环境的不稳定等特殊情况,可能会造成定位失败的情况(获取不到定位信息或者访问延时后报错),那就需要有种补救的措施,来实时的获取一个用户当前的定位信息。该示例就是一个实时定位的助手类。
在项目开启时,开启定时定位,每隔一段时间,将经纬度保存在本地,来供应用程序的相关方法调用。
思路:
1. 定时的发送定位请求,首先需要 定时器 Timer 和 TimerTask ,来定时地发送定位请求;
2. 在定位的回调函数里,将定位获取的信息保存到本地
关键代码实现:
1. 首先将百度定位的jar包放入工程中;
2. 定义一个application类,将定位的代码写在里面,放在application中,可以更好的去管理一些全局的变量和操作,由于定时定位是贯穿于整个APP的,所以放在application中比较好。
private LocationClient mLocationClient = null; //定位类
//是否启动了定位API
private boolean isOpenLocation = false;
@Override
public void onCreate() {
mLocationClient = new LocationClient(this); //实例定位类
}
/**
* start定位
*/
private void startLocation()
{
try {
if(!isOpenLocation) //如果没有打开
{
//该部分主要是对定位类的配置,并没有实质性的去获取定位信息
mLocationClient.setCoorType("bd09ll");