によって定期的に動作するバックグラウンド サービスがあり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 つの質問があります。
- このプロセスを最適化する方法はありますか?
- API レベル 9 にアップグレード (および を使用
locationManager.requestSingleUpdate
) すると、プロセスが大幅に改善されますか? つまり、アップグレードする価値はありますか?