1

に関する過去の質問を読んでいて、 1 つの問題に戸惑っています:によって更新されGpsStatusたオブジェクトから、最後の修正で使用された衛星の数を取得する場合、これが同じ修正であることをどのように知ることができますか?私の?GpsStatusGpsStatusListenerLocatonListener

修正で使用されたサテライトの数を記録するための最初のアプローチは、 my のメソッドでそれらをカウントし、onGpsStatusChangedその数を myのメソッドGpsStatusListenerの先頭でアクセスする変数に渡すことでした。しかし、GPS 修正のために報告された衛星の数が 0 になることがよくありました。何が起こっているのかをログに記録したとき、私はさまざまな衛星数の長いストリームを発射していることに気付きました。最後の 1 つ - 前のものはより高かったにもかかわらず、多くの場合ゼロであることが判明しました。私の推測では、これはタイミングの問題です。最新の修正プログラムは、が衛星の数を記録する時点とがメソッドを開始する時点の間で変更されています。LocationListeneronLocationChangedGpsStatusListenerLocationListenerGpSStatusListenerLocationListeneronLocationChanged

私が試みた 2 番目のアプローチは、単純にGpsStatus内のオブジェクトを更新し、そのオブジェクトのサテライトを myのメソッドのGpsStatusListener最上部でカウントすることです(以下を参照)。ただし、これでも問題は解決しないようです。LocationListeneronLocationChanged

誰もがより良いアプローチを持っていますか? それとも、このタイミングの問題について心配するのは間違っていますか?

2 番目のアプローチで使用するコードの関連部分を次に示します。

    //. . . 

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 に答える