【发布时间】:2013-02-23 19:17:50
【问题描述】:
我一直在阅读过去关于GpsStatus 的问题,但我对一个问题感到困惑:当我从GpsStatus 由我的GpsStatusListener 更新的对象中检索上一次修复中使用的卫星数量时,如何我知道这与我的LocatonListener 记录的修复相同吗?
我记录修复中使用的卫星数量的第一种方法是在我的GpsStatusListener 的onGpsStatusChanged 方法中计算它们,并将数字传递给一个变量,然后我在@987654327 的顶部访问该变量@ 的 onLocationChanged 方法。但是我经常会报告零卫星计数以进行 GPS 修复,当我记录发生的事情时,我发现我的 GpsStatusListener 正在发射一长串不同的卫星计数,之后我的 @ 987654330@ 然后抓住了最后一个——即使之前的值更高,它也经常被证明为零。我的假设是这是一个时间问题:最新修复在GpSStatusListener 记录卫星数量的时间和LocationListener 启动其onLocationChanged 方法的时间之间发生了变化。
我尝试的第二种方法是简单地更新GpsStatusListener 中的GpsStatus 对象,然后在我的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++;
}
} // . . .
【问题讨论】:
标签: android gps locationmanager locationlistener