に関する過去の質問を読んでいて、 1 つの問題に戸惑っています:によって更新されGpsStatus
たオブジェクトから、最後の修正で使用された衛星の数を取得する場合、これが同じ修正であることをどのように知ることができますか?私の?GpsStatus
GpsStatusListener
LocatonListener
修正で使用されたサテライトの数を記録するための最初のアプローチは、 my のメソッドでそれらをカウントし、onGpsStatusChanged
その数を myのメソッドGpsStatusListener
の先頭でアクセスする変数に渡すことでした。しかし、GPS 修正のために報告された衛星の数が 0 になることがよくありました。何が起こっているのかをログに記録したとき、私はさまざまな衛星数の長いストリームを発射していることに気付きました。最後の 1 つ - 前のものはより高かったにもかかわらず、多くの場合ゼロであることが判明しました。私の推測では、これはタイミングの問題です。最新の修正プログラムは、が衛星の数を記録する時点とがメソッドを開始する時点の間で変更されています。LocationListener
onLocationChanged
GpsStatusListener
LocationListener
GpSStatusListener
LocationListener
onLocationChanged
私が試みた 2 番目のアプローチは、単純にGpsStatus
内のオブジェクトを更新し、そのオブジェクトのサテライトを myのメソッドのGpsStatusListener
最上部でカウントすることです(以下を参照)。ただし、これでも問題は解決しないようです。LocationListener
onLocationChanged
誰もがより良いアプローチを持っていますか? それとも、このタイミングの問題について心配するのは間違っていますか?
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++;
}
} // . . .