10
Androidでユーザーの位置を取得する良い方法
問題: ユーザーの現在位置をできるだけ早くしきい値内に収めると同時に、バッテリーを節約します。 問題が問題である理由: まず、androidには2つのプロバイダーがあります。ネットワークとGPS。時々ネットワークはよりよいですそして時々GPSはよりよいです。 「より良い」とは、速度と精度の比率を意味します。 GPSをオンにすることなくほぼ瞬時に位置を取得できる場合は、数メートルの精度を犠牲にしてもかまいません。 次に、現在地が安定している場合、場所の変更の更新をリクエストしても何も送信されません。 グーグルはここに「最高の」場所を決定する例を持っています:http : //developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate しかし、私はそれが必要なほど良い場所ではないと思います/になり得る。 なぜGoogleが位置情報の正規化されたAPIを持っていないのか、ちょっと混乱しています。開発者は位置情報の場所を気にする必要はありません。必要なものを指定するだけで、電話があなたのために選択するはずです。 助けが必要なもの: ヒューリスティックな方法やサードパーティのライブラリを使用して、「最適な」場所を特定するための良い方法を見つける必要があります。 これは、最高のプロバイダーを決定することを意味しません! 私はおそらくすべてのプロバイダーを使用して、それらのベストを選びます。 アプリの背景: アプリはユーザーの現在地を一定の間隔(10分ごとなど)で収集し、サーバーに送信します。 アプリは可能な限り多くのバッテリーを節約する必要があり、場所はX(50-100?)メートルの精度である必要があります。 目標は、後で日中のユーザーの経路を地図上にプロットできるようにすることです。そのため、十分な精度が必要です。 その他: 望ましい精度と許容される精度の妥当な値は何だと思いますか? 私は100mを受け入れ、30mを必要に応じて使用していますが、これで十分でしょうか? ユーザーのパスを後で地図上にプロットできるようにしたいのですが。 100mは希望よりも500mはより良いですか? また、現在、位置情報の更新ごとに最大60秒間GPSをオンにしていますが、屋内にいる場合、おそらく200mの精度で位置を取得するには短すぎますか? これは私の現在のコードです。フィードバックはありがたいです(TODOであるエラーチェックの欠如は別として)。 protected void runTask() { final LocationManager locationManager = (LocationManager) context .getSystemService(Context.LOCATION_SERVICE); updateBestLocation(locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER)); updateBestLocation(locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER)); if (getLocationQuality(bestLocation) != LocationQuality.GOOD) { Looper.prepare(); setLooper(Looper.myLooper()); // …