上文写了GPS的location监听函数和卫星的监听函数,接下来是监听函数的响应函数:
1. location响应函数,当手机终端移动时,位置会发生改变,就会触发下面的location响应函数
//定位监听类负责监听位置信息的变化情况
private final LocationListener locationListener = new LocationListener()
{
//当位置改变时调用下面的函数
@Override
public void onLocationChanged(Location location)
{
//通过GPS获取位置,新的位置信息放在location中,调用updateToNewLocation函数显示位置信息
updateToNewLocation(location);
}
//当Provider不可用时调用下面的函数
@Override
public void onProviderDisabled(String arg0)
{
}
@Override
public void onProviderEnabled(String arg0)
{
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{
updateToNewLocation(null);
}
};
2. 显示GPS位置信息,location响应函数中,当location发生变化时调用下面的函数
private void updateToNewLocation(Location location)
{
if (location != null)
{
bear = location.getBearing(); //偏离正北方的度数
float latitude = (float)location.getLatitude(); //维度
float longitude= (float)location.getLongitude(); //经度
float GpsSpeed = (float)location.getSpeed(); //速度
long GpsTime = location.getTime(); //时间
Date date = new Date(GpsTime); //利用Date进行时间的转换
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置时间的显示格式 也可以设置为:yyyy/MM/dd HH:mm:ss
float GpsAlt = (float)location.getAltitude(); //海拔
latitudeview.setText("" + latitude);
longitudeview.setText("" + longitude);
speedview.setText(""+GpsSpeed);
timeview.setText(""+df.format(date));
altitudeview.setText(""+GpsAlt);
bearingview.setText(""+bear);
}
else
{
Toast.makeText(this, "无法获取地理信息", Toast.LENGTH_SHORT).show();
}
}
}
3.Status 响应函数,当接收到的卫星的参数发生改变时,就会调用下面的响应函数
//添加监听卫星
private final GpsStatus.Listener statusListener= new GpsStatus.Listener(){
@Override
public void onGpsStatusChanged(int event) {
// TODO Auto-generated method stub
//获取GPS卫星信息,与获取location位置信息一样,还是通过locationManager类,方法为getGpsStatus,返回的是一个GpsStatus类型的结构
gpsStatus = locationManager.getGpsStatus(null);
//触发事件event
switch(event)
{
case GpsStatus.GPS_EVENT_STARTED:
break;
//第一次定位时间
case GpsStatus.GPS_EVENT_FIRST_FIX:
break;
//收到卫星信息,并调用DrawMap()函数,进行卫星信号解析并显示到屏幕上
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
DrawMap();
break;
case GpsStatus.GPS_EVENT_STOPPED:
break;
}
}
};
4. 卫星信号解析
private int heightp;
private int widthp;
protected void DrawMap() {
// TODO Auto-generated method stub
int i = 0;
//获取屏幕信息,dm为DisplayMetrics类型的变量
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm); //调用这三个函数将屏幕信息保存在dm中
heightp = dm.heightPixels; //手机屏幕高度
widthp = dm.widthPixels; //手机屏幕宽度
//获取卫星信息,gpsStatus为卫星响应函数中获得的卫星GpsStatus类型变量
allSatellites = gpsStatus.getSatellites();
Iteratorsate = allSatellites.iterator();
//遍历获取每颗卫星的信息
while(Iteratorsate.hasNext())
{
GpsSatellite satellite = Iteratorsate.next();
alimuth[i] = satellite.getAzimuth(); //坐标方位角
elevation[i] = satellite.getElevation(); //卫星仰角
snr[i] = satellite.getSnr();
i++;
}
satcountview.setText(""+i);
//layout为继承自View的类,并调用其中的redraw显示卫星信息
layout.redraw(bear,alimuth,elevation,snr, widthp,heightp, i);
//调用invalidate()方法刷新view,显示绘制的信息
layout.invalidate();
}