【发布时间】:2014-09-04 23:02:14
【问题描述】:
有什么原因导致有时视野中有几颗卫星,但没有一颗用于修复?
我制作了一个小应用程序来跟踪 gps 位置,有时它会显示 8 颗以上的卫星,但没有一个用于修复。
请看下面的图片。它说明了正在发生的事情:
每个“绿色箭头”都指向设备所在的位置+方向。红线是我所说的“差距”。手机已开机,应用程序正在运行,并且 locationmanager 一直在接收“卫星状态更新”,但在红线中它得到 0 颗“用于修复”的卫星。
这发生在几种不同的设备型号(手机和平板电脑)和不同的 android 版本(3.x 到 4.x)上。
我正在努力解决这个问题。感谢任何帮助。
编辑:
一些相关代码:
@Override
public void onCreate()
{
// when service is created, we start monitoring gps status
GpsStatus.Listener gpsStatusListener = new GpsStatus.Listener()
{
@Override
public void onGpsStatusChanged(int event)
{
LocationManager lm = (LocationManager) GooglePlayLocationServices.this.getSystemService(Context.LOCATION_SERVICE);
GpsStatus gpsStatus = lm.getGpsStatus(null);
String msg = "";
if (event == GpsStatus.GPS_EVENT_STARTED)
{
msg = "onGpsStatusChanged: " + "GPS_EVENT_STARTED";
}
else if (event == GpsStatus.GPS_EVENT_STOPPED)
{
msg = "onGpsStatusChanged: " + "GPS_EVENT_STOPPED";
}
else if (event == GpsStatus.GPS_EVENT_FIRST_FIX)
{
msg = "onGpsStatusChanged: " + "GPS_EVENT_FIRST_FIX";
msg += " = " + ((gpsStatus != null) ? gpsStatus.getTimeToFirstFix() / 1000 : 0) + "s";
}
else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS)
{
msg = "onGpsStatusChanged: " + "GPS_EVENT_SATELLITE_STATUS";
if (gpsStatus != null)
{
Iterable<GpsSatellite> satellites = gpsStatus.getSatellites();
Iterator<GpsSatellite> sat = satellites.iterator();
int i = 0;
int used = 0;
while (sat.hasNext())
{
i++;
GpsSatellite satellite = sat.next();
if (satellite.usedInFix())
used++;
}
msg += " - satelites = " + used + "/" + i;
lastSatelitesInfo = used + "/" + i;
}
}
if (msg.length() > 0)
log(msg);
}
};
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.addGpsStatusListener(gpsStatusListener);
)
日志输出:
[02/09/14 18:42:01] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
[02/09/14 18:42:02] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
[02/09/14 18:42:03] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
...
[02/09/14 18:44:23] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
[02/09/14 18:44:24] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
[02/09/14 18:44:25] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
...
[02/09/14 18:52:08] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
[02/09/14 18:52:09] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
[02/09/14 18:52:10] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
...
[02/09/14 19:56:32] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
[02/09/14 19:56:33] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
[02/09/14 19:56:34] onGpsStatusChanged: GPS_EVENT_SATELLITE_STATUS - satelites = 0/11
...
【问题讨论】: