関係するいくつかのパラメーターを指定していませんが、試してみます。
正確なLocation
パラメータは、その特定のソースLocation
、つまり、それがどのように取得され、どのジオロケーションソースを使用しているかによって異なります。例えば:
- GPSを使用する場合、
Location
は信頼できるaccuracy
値になります。
- セルラーネットワーク無線局(BTS)を使用する場合、受信する精度は、世界中のBTSのデータベース、その場所、および範囲に制限されます。
- Wi-Fiネットワークとその報告された信号強度を使用する場合、精度はWi-Fiネットワークのデータベースの品質に依存します。残念ながら、このようなデータベースの保守と作成は安価ではありません。たとえば、Googleはそのようなデータベースを購入し、そのようなネットワークをスキャンするためにGoogleストリートビューの車を使用します。
- パブリックIPアドレスに基づくローカリゼーションを使用する場合、それがIANA IPアドレス空間レジストリに含まれる最も正確な情報であるため、精度は町に制限されます。また、プロキシサーバーを使用してだまされる可能性があります。
ロケーションサービスから得られる精度は、ロケーションが取得された瞬間にデバイスが存在する可能性が高い、報告されたロケーションからの距離(メートル単位)を表します。
したがって(私があなたの質問を正しく理解している場合)、現在のデバイスの場所を取得するための低精度の方法を使用していると推測します。Location
より正確にソースに切り替える必要があります。
また、位置情報サービスで使用される位置情報取得方法(つまり、上記のように位置を見つけるために使用されるサービス)は、実際には返される精度を提供できない場合があることにLocation
注意してください。それが何を意味するのかを理解するために、次のシナリオとその2つの結果を検討してください。どちらもWi-Fiネットワークに基づく同じ位置特定方法に由来することに注意してください。
- あなたはいくつかのWi-Fiネットワークの範囲内にいます。デバイスの場所について位置情報サービスに問い合わせます。範囲内のすべてのWi-Fiネットワークは、たまたまロケーションサービスDBにあります。したがって、位置情報サービスは、まともな精度であなたの位置を取得することができます。
- あなたはいくつかのWi-Fiネットワークの範囲内にいます。ただし、それらの起源(町)がわかっているという点で、位置情報サービスによく知られているものはありませんが、正確な場所と範囲は不明です。その場合、位置情報サービスはあなたがどの国/町にいるかを教えてくれますが、あなたの正確な場所はわかりません。同様に、位置情報サービスは正確性のない位置情報を提供する可能性があります。
精度が利用できるかどうかをテストして、そのような機会に備えておく必要があります。これを行うには、を発行しLocation.hasAccuracy()
ます。戻り値がfalse
、の場合、呼び出すことはできません(実際には呼び出すLocation.getAccuracy()
ことができますが、注意してください-返されます0
!)。したがって、条件は次のようになります。
if (this.location != null && this.location.hasAccuracy() && this.location.getAccuracy() < 700) {
// do something
}