3

私のアプリでは、現在の場所を送信するサーバーにWebService呼び出しを行うために、時々AlarmManager実行するセットがありますIntentService

アラームが開始されると、ローカルで場所を追跡Serviceするも開始します。LocationManager

サーバーへのWebサービス呼び出しを行うときに使用します

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);

        String provider = locationManager.getBestProvider(criteria, true);
        Location lastKnownLocation = locationManager.getLastKnownLocation(provider);

この時点では場所のみが必要であり、次に Web サービスが再度呼び出されたときに、場所を取得するだけです。GPSしかし、バックグラウンドで を使用して適切な場所を取得するサービスを実行しているにもかかわらず、それが表示されます。

locationManager.getLastKnownLocation(provider);

場所を取得する Web サービスを作成すると、現在の場所ではなく、古い場所が返されます。今、私はすでに別のサービスで実行されているロケーションマネージャーを持っているので、呼び出されるgetLastKnownLocationたびに正しい場所に更新されると思いますonLocationChangedが、それは明らかにそうではなく、私には意味がありません.

IntentServiceだから私の質問は、私が頼ることができないので、どうすれば自分の正しい場所を取得できるかということですgetLastKnownLocation

場所が変更されるたびに場所を知る必要はありません。Web サービスを呼び出すときにそれが何であるかを知る必要があるだけなので、別の場所マネージャーを開始することはお勧めできません。これを解決するために私が考えることができる唯一のことは、他のサービスからの場所を保存しSharedPreferences、そこにあるものをすべて取得することですが、それは少しハッキーに思えて、私はハッキーが好きではありません.

何か案は?

4

1 に答える 1