時々位置を報告する Android バックグラウンド サービスがあります。Wi-Fi 経由でローカルにテストすると、かなりうまく動作しますが、たとえば 3G 接続で (場合によっては Edge で) テストすると、アプリケーションが明らかにボトルネックに入り、onLocationChangedメソッドを実行しないことがわかりました。たぶん信号が失われたかなどなので、それは大丈夫です。ただし、しばらくすると(おそらく接続が再確立されたとき)、すべてのリクエストが一度に更新され始め、数秒のうちにonLocationChangedメソッドが何度も実行されます。
誰かがそれを解決する方法を知っていますか? メソッドlocationManager.requestLocationUpdatesにタイムアウトを追加することは可能ですか?
マイリスナー
public class MyListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
//report location to server
HttlCallToUpdatePostion(loc.Latitude, loc.Longitude, loc.Accuracy);
}
}
私のサービス
Handler handler = null;
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
MyListener listener = new MyListener();
protected void doWork() {
Looper.prepare();
handler = new Handler();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, listener);
Looper.loop();
}