ユーザーの現在地を追跡したいマップビューがあります。携帯電話の設定で、GPS と「ワイヤレス ネットワークの使用」が有効になっています。とはいえ、私は屋内にいるので GPS を取得できません。そのため、場所はネットワーク経由で特定されます。wifiスポットをご利用いただけます。
Google マップ アプリとアプリケーションを実行しています。
奇妙なことに、現在の場所は Google マップと私のアプリケーションでは異なります。Google マップは非常に正確ですが、私のアプリでは場所が数 100 メートルずれています。
私のアプリケーションでは、基本的に次のことを行います(デバッグ目的で):
1) 最初に 1 つのマーカーをマップに配置します。locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
2) 最初にマップ上に別のマーカーを配置します: 経由で取得したジオポイントlocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
これにより、両方のプロバイダーの最後の既知の場所がマップに表示されます (最終的には、アプリの外部から最後に認識されます)。
3) 次に、定期的な更新のために (ここではとにかく屋内で GPS を修正できないため)、次のことを行います。
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, baseLocationListener);
どちらの場合も 0 パラメータを渡す頻度と距離を確認できます。
アプリ マニフェストでは、次のアクセス許可が付与されます。
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION
実際には、私の baseLocationListener が呼び出され、ログに表示されますが、更新された場所は、(LocationManager.NETWORK_PROVIDER の) 最後に確認された現在の位置と同じ緯度/経度です。
何かを見落としていたり、パラメーターや設定を見逃していたり、コードにバグがあるのではないかと考えました。したがって、現在のユーザーの場所も表示する Android マーケットから、他の (合計 3 つの) LBS アプリをインストールしました。これらのアプリに表示される現在の場所は、私のアプリケーションのものと同じで、すべて 100 メートルほど離れていますが、少なくともすべて同じです。
ここでスクリーンショットを参照してください: スクリーンショット http://img33.imageshack.us/img33/8679/mapproblem.png
http://img33.imageshack.us/img33/8679/mapproblem.png
今私は疑問に思っています:
1) 私が理解しているように、getLastKnowLocation はシステム全体であり、アプリ全体ではありません。Google マップの場所と他のすべてのアプリに違いがあるのはなぜですか?
2) Google マップはプロバイダーの lastKnownLocation を更新しませんか?
3) Google マップは、SDK に含まれている GPS_PROVIDER または NETWORK_PROVIDER 以外の別のカスタム ロケーション プロバイダーを (つまり、ライセンス上の理由により) 使用しますか?
4) Google マップのように NETWORK_PROVIDER で同じ正確な結果を得るにはどうすればよいですか?