これは、GPS 位置情報の更新をリッスンする方法です (LocationManager
とを使用LocationListener
):
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
listener = new MyLocationistener(); // LocationListener
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
30000, // milliseconds (minTime)
20, // meters (minDistance)
listener );
minTime
しかし、 で使用されるおよびminDistance
引数を動的に調整したいと思いLocationManager#requestLocationUpdates
ます。私の目的は、いくつかの使用ポリシーに従って、バッテリーを節約することです。
- ユーザーが移動していない場合は、minTime を増やして位置情報の更新を取得します
- ユーザーが非常に速く動いている場合は、minDistance を増やします
- ユーザーが屋内にいる場合 (GPS がカバーされていない場合)、両方を増やします。
- バッテリーが低すぎる場合は、両方を増やします
- ... (その他のヒューリスティック)
私が知りたいのですが:
- これは本当にバッテリー寿命を節約するための良い考えですか?
- どうすればそのような調整を行うことができますか? 唯一の選択肢があれば、両方
LocationManager#removeUpdates
を何度でも呼び出すことができます。LocationManager#requestLocationUpdates
- この種の適応アルゴリズムを実装するために知っているアイデアやサンプル コードはありますか?
編集: このアプリケーションは、特定の場所に最も近い人にタスクを割り当てるために、人がどこにいるかを知るための追跡システムです。実際にはバッテリーが8時間もつことはほとんどないので、増やしたいと思っています。