getLastLocation()
メソッドは、デバイスが知っている最後の既知の場所を取得します。ここでの「最後の既知の場所」とは、最新のものではない可能性があることを意味します。場所にはタイムスタンプが付いています。このタイムスタンプは、場所がまだ関連しているかどうかを判断するために使用できます。
デバイスは、自分の場所を特定しませんが、アプリケーションによってはその場所が要求された場合に限ります。だから、あなたのアプリは現在、位置の更新を要求する他のアプリケーションに依存しています。
数秒ごとに更新が必要な場合は、定期的に場所の更新をリクエストしてください。
Android documentationは、FusedLocationProviderを推奨していますが、LocationManagerは、Google Playサービスを避ける理由があれば、完全に有効なオプションです。更新はリスナーによって受信され
// Using LocationManager as an example.
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// Using GPS, requesting location updates as soon as available and even for
// the smallest changes. Here 'this' refers to our LocationListener
// implementation.
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
:
基本的な考え方は、最初の要求の位置情報の更新にある
@Override
public void onLocationChanged(Location location) {
// We received a location update.
// Copy the value from the method parameter to our
// class member variable.
mLocation = location;
}
をそして、あなたは、もはや更新を必要とするとき、あなたは要求を取り消してはなりません:
mLocationManager.removeUpdates(this);
アプローチは、FusedLocationPrオービルダー。
'getLastLocation()'メソッドは、デバイスが知っている最後の既知の場所を取得します。デバイスは、自分の場所を特定するのではなく、アプリケーションによって場所が要求された場合にのみ、その場所を判断します。だから、あなたのアプリは現在、位置の更新を要求する他のアプリケーションに依存しています。数秒ごとに更新が必要な場合は、定期的に場所の更新をリクエストしてください。 [ドキュメントのセクション](http://stackoverflow.com/documentation/android/1837/location#t=201610120710565214353)にはコード例があります。 –
@MarkusKauppinenあなたが正しいです。ドキュメントはこれについてあまり明確ではなく、私の前提はアンドロイドOSがバックグラウンドで自動的にGPSをポーリングし、getLastLocation()が_latest_結果を提供するということでした。あなたのコメントで質問に答えると、私はそれを回答としてマークすることができます。ありがとう! – Shahin
これはよくある混乱のようです。何らかの形でドキュメントが古いと無効な場所かもしれないことを明らかにするかもしれません。技術的には、実際には「最新の既知の場所」なので正しいです。とにかく、私は今すぐ適切な答えを加えました。これはいくつかの古い質問と重複する可能性がありますが、私は簡単には良い候補を見つけることができませんでした。それらのほとんど(受け入れられた回答を持つ)はちょうど 'ヌル'の場所を取得しています。 –