3、GpsStatus监听器
  上面给出了定位服务的初始化设置步骤,但我们都知道GPS卫星是定期广播数据的,也是说会定期收到卫星的GPS数据。我们并不能跟卫星主动申请数据,只能被动接收数据。(中国的北斗2倒是可以发送卫星报文给卫星)因此我们需要注册一个监听器来处理卫星返回的数据。
//Edited by mythou
//http://www.cnblogs.com/mythou/
private final GpsStatus.Listener statusListener = new GpsStatus.Listener()
{
public void onGpsStatusChanged(int event)
{
// GPS状态变化时的回调,获取当前状态
GpsStatus status = locationManager.getGpsStatus(null);
//自己编写的方法,获取卫星状态相关数据
GetGPSStatus(event, status);
}
};
  4、获取搜索到的卫星
//Edited by mythou
//http://www.cnblogs.com/mythou/
private void GetGPSStatus(int event, GpsStatus status)
{
Log.d(TAG, "enter the updateGpsStatus()");
if (status == null)
{
}
else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS)
{
//获取大的卫星数(这个只是一个预设值)
int maxSatellites = status.getMaxSatellites();
Iterator<GpsSatellite> it = status.getSatellites().iterator();
numSatelliteList.clear();
//记录实际的卫星数目
int count = 0;
while (it.hasNext() && count <= maxSatellites)
{
//保存卫星的数据到一个队列,用于刷新界面
GpsSatellite s = it.next();
numSatelliteList.add(s);
count++;
Log.d(TAG, "updateGpsStatus----count="+count);
}
mSatelliteNum = numSatelliteList.size();
}
else if(event==GpsStatus.GPS_EVENT_STARTED)
{
//定位启动
}
else if(event==GpsStatus.GPS_EVENT_STOPPED)
{
//定位结束
}
}
  上面是从状态值里面获取搜索到的卫星数目,主要是通过status.getSatellites()实现。获取到的GpsSatellite对象,
  保存到一个队列里面,用于后面刷新界面。上面是获取GPS状态监听器,除了GPS状态外,我们还需要监听一个服务,
  是:LocationListener,定位监听器,监听位置的变化。这个对做定位服务的应用来说,十分重要。
  5、LocationListener监听器
//Edited by mythou
//http://www.cnblogs.com/mythou/
private final LocationListener locationListener = new LocationListener()
{
public void onLocationChanged(Location location)
{
//当坐标改变时触发此函数,如果Provider传进相同的坐标,它不会被触发
updateToNewLocation(location);
Log.d(TAG, "LocationListener  onLocationChanged");
}
public void onProviderDisabled(String provider)
{
//Provider被disable时触发此函数,比如GPS被关闭
Log.d(TAG, "LocationListener  onProviderDisabled");
}
public void onProviderEnabled(String provider)
{
// Provider被enable时触发此函数,比如GPS被打开
Log.d(TAG, "LocationListener  onProviderEnabled");
}
public void onStatusChanged(String provider, int status, Bundle extras)
{
Log.d(TAG, "LocationListener  onStatusChanged");
// Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
if (status == LocationProvider.OUT_OF_SERVICE || status == LocationProvider.TEMPORARILY_UNAVAILABLE)       {
}
}
};
  位置监听回调是用来处理GPS位置发生变化的时候,自动回调的方法,我们可以从这里获取到当前的GPS数据。另外我们可以通过回调函数提供的location参数,获取GPS的地理位置信息,包括经纬度、速度、海拔等信息。