我一直在阅读过去的问题GpsStatus
,但我对一个问题感到困惑:当我从GpsStatus
我更新的对象中检索上一次修复中使用的卫星数量时,我GpsStatusListener
怎么知道这是同一个修复由我记录LocatonListener
?
我记录修复中使用的卫星数量的第onGpsStatusChanged
一种方法是在 my 的方法中计算它们,并将数字传递给一个变量,然后我在 my 方法的GpsStatusListener
顶部访问该变量。但是我经常会报告零卫星计数以进行 GPS 修复,当我记录发生的事情时,我发现我正在发射一长串不同的卫星计数,然后我就抓住了最后一个 - 即使以前的更高,它也经常被证明为零。我的假设是这是一个时间问题:最新的修复在记录卫星数量的时间和开始其方法的时间之间发生了变化。LocationListener
onLocationChanged
GpsStatusListener
LocationListener
GpSStatusListener
LocationListener
onLocationChanged
我尝试的第二种方法是简单地更新 中的GpsStatus
对象GpsStatusListener
,然后在我LocationListener
的onLocationChanged
方法的最顶部计算来自该对象的卫星(见下文)。但是,这似乎也不能解决问题。
有没有人有更好的方法?还是我担心这个时间问题是错误的?
这是我用于第二种方法的代码的相关部分:
//. . .
private class GpsStatusListener implements GpsStatus.Listener {
@Override
public void onGpsStatusChanged(int event) {
if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
if (gpsStatus != null) {
locationManager.getGpsStatus(gpsStatus);
}
}
}
}
private class mLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
GpsStatus thisFixGpsStatus = gpsStatus;
Iterator<GpsSatellite> sats = thisFixGpsStatus.getSatellites()
.iterator();
satCount = 0;
while (sats.hasNext()) {
GpsSatellite gpsSatellite = (GpsSatellite) sats.next();
if (gpsSatellite.usedInFix()) {
satCount++;
}
} // . . .