因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下。这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品。现在工作需要,重新拿出来修整。同时发现我对android的GPS服务了解并不深,所以特意阅读了有关GPS服务的一些资料,把相关知识点记录下来。
  本人做了GPS相关的嵌入式软件已经几年了,所以说起要做个测试GPS定位模块的程序,第一反应是串口读取GPS模块的数据,然后解析GPS的NMEA格式数据。NMEA是一种标准化数据格式,不仅仅GPS上应用了,其他一些工业通信也是使用这种标准化数据格式。解析相关数据然后显示出来,完成了一个基本的GPS定位测试功能。
  查了一下才发现Android上做GPS相关定位服务,不需要读取NMEA数据分析,Android已经封装好了相关服务,你要做的是调用API。这个不知道应该觉得爽还是觉得纠结。(Android也提供了读取NMEA接口,下面会说到)
  1、Android 定位服务
  下面我们先来看看Android有关定位服务提供的支持:

  Android定位服务都是位于location下,上面都有相关说明,这里不详细解析。有一点有需要说说的
  是:GpsStatus.NmeaListener 官方的说法是可以读取NMEA数据,但是我这里测试发现,并没有读取到NMEA的数据。查阅过一些资料,说是google在底层并没有实现数据反馈的功能。有时间,需要查看一下源码。
  2、LocationManager定位
//Edited by mythou
//http://www.cnblogs.com/mythou/
//获取定位服务
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
//判断是否已经打开GPS模块
if (locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER))
{
//GPS模块打开,可以定位操作
}
// 通过GPS定位
String LocateType= locationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(LocateType);
// 设置监听器,设置自动更新间隔这里设置1000ms,移动距离:0米。
locationManager.requestLocationUpdates(provider, 1000, 0, locationListener);
// 设置状态监听回调函数。statusListener是监听的回调函数。
locationManager.addGpsStatusListener(statusListener);
//另外给出 通过network定位设置
String LocateType= locationManager.NETWORK_PROVIDER;
Location location = locationManager.getLastKnownLocation(LocateType);