1

我一直在阅读过去的问题GpsStatus,但我对一个问题感到困惑:当我从GpsStatus我更新的对象中检索上一次修复中使用的卫星数量时,我GpsStatusListener怎么知道这是同一个修复由我记录LocatonListener

我记录修复中使用的卫星数量的第onGpsStatusChanged一种方法是在 my 的方法中计算它们,并将数字传递给一个变量,然后我在 my 方法的GpsStatusListener顶部访问该变量。但是我经常会报告零卫星计数以进行 GPS 修复,当我记录发生的事情时,我发现我正在发射一长串不同的卫星计数,然后我就抓住了最后一个 - 即使以前的更高,它也经常被证明为零。我的假设是这是一个时间问题:最新的修复在记录卫星数量的时间和开始其方法的时间之间发生了变化。LocationListeneronLocationChangedGpsStatusListenerLocationListenerGpSStatusListenerLocationListeneronLocationChanged

我尝试的第二种方法是简单地更新 中的GpsStatus对象GpsStatusListener,然后在我LocationListeneronLocationChanged方法的最顶部计算来自该对象的卫星(见下文)。但是,这似乎也不能解决问题。

有没有人有更好的方法?还是我担心这个时间问题是错误的?

这是我用于第二种方法的代码的相关部分:

    //. . . 

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++;
            }
        } // . . .  
4

1 回答 1

2

虽然这可能无法完全回答您的问题,但一些背景信息:

GPS芯片通常不会每秒提供卫星(使用)数据集的数量。典型值为每 5 或 10 秒。原因是卫星星座不是每秒钟都在变化。

所以可能没有办法让 num sats 同步到 android 手机上的对应修复。

于 2013-03-08T11:54:38.370 回答