アンドロイドでGPSやネットワークから最も正確なデバイスの位置を取得しよう
-
19-09-2019 - |
質問
私は可能な限り短い時間で、デバイスの最も正確な位置を決定しようとしています。
私はgeopointなどのデータを格納し、それがのMapView上に表示していています。
私は私のデバイス上でGPSを活性化し、それは場所のロックを取得してみましょう最後の時間は、私は80マイル、私は今の私どこから約ました。
私は、ロケーションマネージャのセットアップと場所リスナーを持っています。
私はこれを行う場合は、、私はNULLを取得ます。
myLocOverlay = new MyLocationOverlay(this, mapView);
GeoPoint test = myLocOverlay.getMyLocation();
が、行の次のカップルで、
myLocOverlay.enableMyLocation();
mapView.getOverlays().add(myLocOverlay);
これにより、地図上のオーバーレイは現在の位置を示します。これは、ネットワークプロバイダを使用しているが、また、GPS修正を取得しようとしている(それは私が屋内で午前ことができないとして、ノーどこ最上階に近い)。
私はこのようなgeopointを構築する場合は、
if(lm.getLastKnownLocation("gps") != null)
{
test = new GeoPoint(
(int) (lm.getLastKnownLocation("gps").getLatitude() * 1E6),
(int) (lm.getLastKnownLocation("gps").getLongitude() * 1E6));
}
else
{
if(lm.getLastKnownLocation("network") != null)
{
test = new GeoPoint(
(int) (lm.getLastKnownLocation("network").getLatitude() * 1E6),
(int) (lm.getLastKnownLocation("network").getLongitude() * 1E6));
}
//bad things
}
それから私は、混乱の結果を得ます。私は、デバイスのGPSプロバイダを無効にした場合のコードは、ネットワークプロバイダに移動し、私はかなり正確な結果を与えます。私はGPSプロバイダを有効にした場合、geopointは、私は、デバイスは、GPSロックを取得することができ、最後の場所として戻ってきます。
私は、上記の結果を避けたい、とそう使用して見ていた。
GeoPoint test = myLocOverlay.getMyLocation();
しかし、私は上記の言ったように、私はちょうどそれからNULLを取得ます。
私は少しこだわっている - それは、ネットワークの場所のうちの1マイルを言っている場合は、GPSとネットワークの両方からgeopointsを取得し、それらを比較し、GPSを無視のショートが起こります。なぜgetMyLocation()仕事、myLocOverlayはMapViewの上に表示されているもののGeoPointを返すはずのがいますか?
解決
これはnullを返すことがあります。あなたは、ネットワークとGPSソースの両方からのアップデートを受け入れるLocationListener
を登録する必要があります。次に、あなたが位置更新を取得するとき、あなたは場所の精度を見ることができますし、それを使用するかどうかを決定します。
他のヒント
私はあなたの地理ポイントのために速すぎ求めていることを推測します。 MyLocationOverlayは修正を取得するために、独自のリスナーを使用します。そして多分GPSはそれがどのように古い探して修正するために、そのネットワークの修正を取得し、GPSの修正を待っている間にすることを使用して古すぎるかどうかを尋ねるれます。
このは、GPSチップセットとGSMモデムとバックグラウンドでのWebバックエンドと話すこと。
それはあなたのプログラムは、次の行に移動する必要がある時にはできません。
UIで、それはかなり瞬時に見えますが、それは、人間の目で測定されます。
あなたはCaseyBからの回答で行くとプロバイダーの両方に、独自のGPSリスナーを登録し、使用するcoorodinate自分で決めることができました。あなたはこれをしたい場合は、最後の修正(Location.getTime())との位置精度の時間を取得する方法があります。
第2の可能性は、そうだとすれば、コールはまだnullを返した場合、その後少し長く待って少し待ってから見ることです。