0

アプリのバックグラウンドで長時間実行するタスクがあるため、サービスを実装してジョブを実行しようとしています。

このサービスはLocationClientインスタンスからの位置データを使用し、各リクエストは PendingIntent で起動されます。最小ターゲット バージョンでは、新しい LocationServices を使用できません。Android のドキュメントでは、アプリケーションがシステムによって強制終了された可能性があるため、LocationClient.requestLocationUpdates(...) メソッドの PendingIntent バージョンを使用するようにアドバイスされています。

同様の説明に一致する私が見たすべての は、IntentService を実装し、インテント KEY_LOCATION_CHANGED を余分に受け取る onHandleIntent(Intent intent) をオーバーライドします。ただし、 Service にはそのようなメソッドはなく、そのようなインテントは onStartCommand(...) に配信されません。

このコードは、位置データのリクエストを設定するために使用され、LocationRequester オブジェクトから取得されます (一度に実行されるこれらのオブジェクトの数に制限はありませんが、1 つだけが生成されてリクエストを行った場合の結果は同じです)。

Intent intent = new Intent(context, MyLocationService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
locationClient.requestLocationUpdates(someLocationRequest, pendingIntent);

上記のコードで MyLocation*Intent*Service を使用すると、インテントが MyLocationIntentService.onHandleIntent(intent) に配信され、KEY_LOCATION_CHANGED エクストラを探します。サービスに変更を加えた後、位置データを使用する方法がわかりません。リクエストが行われたときに LocationClient が接続されていることを確認しました。

onStartCommand(...) を監視しようとしましたが、インテントが配信されません。私の質問は、サービスの実装で位置データをどのように使用するのですか?

不明な点やさらに詳しい情報が必要な場合は、お知らせください。ありがとう!

4

1 に答える 1

0

私が望むほどきれいではありませんが、解決策を見つけました。

Service を使用して Requester オブジェクトを作成しました。これらのオブジェクトはそれぞれ LocationListener の実装であり、独自の要求のみを消費しました。これは、質問のいくつかの制約を放棄することを意味しました:(。リクエスターオブジェクトは、ロケーションを受信すると(上書きされた onLocationChanged(...) メソッドで、特定の詳細をエクストラとしてサービスにインテントを送信します。

言い換えれば、サービスは位置データを直接消費しませんでした-それを要求した個人はそれを行い、インテントを作成し、関連データを添付し、ピックアップされたstartService(...)を呼び出すことにより、それをサービスに送り返しました。 Service.onStartCommand(...) による。

于 2014-08-07T16:13:42.297 に答える