リリース以来、融合された位置情報プロバイダーを使用してきましたが、かなり満足しています (古いシステムよりもはるかに優れています)。しかし、ジオフェンシングを LocationClient.lastKnownLocation() と組み合わせて使用すると、奇妙な問題に遭遇しました。セットアップは次のとおりです。
いくつかのジオフェンスをいくつかのホーム ロケーションの周囲に配置します (範囲を増やします)。フェンスが交差しているという意図が得られたら、LocationClient から最後に認識された場所を取得し、それを操作します。それとは別に、更新モード PRIORITY_BALANCED_POWER_ACCURACY で定期的な位置情報の更新も登録しました。
ほとんどの場合、これで問題なく動作しますが、次のようなことが起こることがあります。
時間 000 秒 - (緯度、経度、精度) = (48.127316,11.5855167,683.0)
時間 120 秒 - (緯度、経度、精度) = (48.1260497,11.5731745,31.823)
時間 300 秒 - (緯度、経度、精度) = (48.1217455,11.5641666,143.81)
時間 420 秒 - (緯度、経度、精度) = (48.1189942,11.559061,36.0)
時間 600 秒 - (緯度、経度、精度) = (48.127316,11.5855167,683.0)
これらの場所はすべてgetLastKnownLocation()によって取得されることに注意してください。ここで怪しいと思われるのは、より具体的に言うと、最初と最後の場所が (他の属性であっても) 同じであることです。
* intent at time 0: *
component: ComponentInfo{package.Class}
key [location]: Location[mProvider=fused,mTime=1373524391934,mLatitude=48.127316,mLongitude=11.5855167,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=683.0,mExtras=Bundle[mParcelledData.dataSize=352]]
* intent at time 600: *
component: ComponentInfo{package.Class}
key [location]: Location[mProvider=fused,mTime=1373524994871,mLatitude=48.127316,mLongitude=11.5855167,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=683.0,mExtras=Bundle[mParcelledData.dataSize=352]]
* note the ~600 s difference in the timestamp *
より最近でより正確な場所が間にあったため、これがどのように発生するのかわかりません。また、古い場所の新しいタイムスタンプも気になります...古い APIを使用したときに同様のことが起こったようですが、この新しい場所プロバイダーは と呼ばれているだけなので、GPS とWPSをセンサーfused
と区別することはできません...携帯電話基地局の切り替えの問題 (古い API に関するリンクされた質問で概説されています) では、電話が近くの塔を見た場合、電話が「遠くの」塔に接続するのはなぜですか?
なぜこうなった?