3

によって定期的に動作するバックグラウンド サービスがありtimer.scheduleAtFixedRateます。一定時間 (たとえば 60 秒) ごとに起動し、場所を確認します。

ロケーションは によってチェックされlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 5, listener);、実際のロケーションはリスナーの から収集されonLocationChangedます。

現在、電話が屋外にあり、GPS 受信が良好な場合、これは正常に機能します。しかし、携帯電話が屋内にある場合、GPS はほぼ常にアクティブであり、信号を探しているため、バッテリーが急速に消耗します。

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);GPS のアクティブ時間を正確に制御するために、HandlerとRunnable を使用して別のスレッドを作成しましたlocManager.removeUpdates(listener);。この場合、正確な時間だけ GPS を開くことができますが、10 秒経過しても受信状態の良いエリアにロックされないことがわかりました。ここでまた電池切れ…。

API レベル 7 を使用しているため、使用できませんlocationManager.requestSingleUpdate。2 つの質問があります。

  1. このプロセスを最適化する方法はありますか?
  2. API レベル 9 にアップグレード (および を使用locationManager.requestSingleUpdate) すると、プロセスが大幅に改善されますか? つまり、アップグレードする価値はありますか?
4

1 に答える 1

0

ここで説明されているNETWORK_PROVIDERはどうですか?限られた時間内に場所を見つけることができない場合、つまりあなたが中にいる場合やGPS受信が十分でない場合は、代わりにネットワークの場所を使用できるシステムを使用できます。使用するバッテリーが少ないため、少なくとも回避策または代替手段になります。しかし、プレシジョンは低くなります。

于 2012-06-03T10:18:39.900 に答える