2016-08-22 5 views
1

私は、定期的にいくつかの情報(ユーザーの所在地など)を取得し、サーバーに報告し、場所がXの場所に一致するとプッシュ通知を受け取るようにしたいと考えています。GoogleAPIClientをバックグラウンドサービスで使用する

私は、アプリケーションが動作しているかどうかにかかわらず、定期的に位置情報を取得するための最良のメカニズムについて何らかの助言を得るでしょう。ここで私が考えているオプションとそれぞれの背景情報を紹介します。

は、標準のAndroidサービス

私の最初の考えを作成すると、位置情報の更新を取得し、場所が受信されると、それはそれをサーバーに送信しますGoogleAPIClientを初期化STICKYサービスを作成することでした。私がこのアプローチで持っている問題は、定期的に位置情報を取得しなければならないということです。したがって、ロケーションスキャンを実行していなくても、サービスは常に実行されます。また、サービス内で場所を頻繁にポーリングする最善の方法は何でしょうか? IntentService

私はアラームマネージャのウェイクアップを有する(GoogleAPIClientを経由して)位置情報の更新を開始しIntentServiceを開始したことについて考え番目のオプションでアラームを作成

。場所が取得されると、サーバーに送信し、場所の更新を閉じます。これにより、定期的に位置更新を開始/停止する問題が解決されます。しかし、私はIntentService内でGoogleAPIClientに接続することなく待ち時間を取ることはあまりありませんでしたが、これが最も効率的なことだとは思いません。 GcmTaskService

これはAlarmManagerの多くの利点を持っており、それが唯一のサービスをウェイクアップとして携帯電話が、それはのように思えたので、メンテナンスモードになっている時はいつでも居眠りモードの点でより効率的であるように思わ作成

良い解決策。しかし、私はIntapiServiceと同じ問題を抱えていますが、これはGoogleAPIClientに接続して何らかの待ち時間なしに場所を取得しています。

私はこの1つのウサギの穴をあまりにも遠くに行っているかもしれません。

答えて

0

同じ問題がありました。私は最初のアプローチ(スティッキーなサービス)に行き、すべてうまくいった。しかし、私はそのサービスが常に実行されており、ユーザーに見えるということは気に入らなかった。 これは、docsに従ってバックグラウンドワークを実行するための好ましい方法であるため、JobScheduler APIを使用することに決めました。

アプリがAPI> = 21をターゲットにしている場合は、JobSchedulerを使用します。古いバージョンのプラットフォームをサポートしたい場合は、最近導入されたFirebase JobDispatcherライブラリを使用する必要があります。残念なことに、このライブラリはドキュメントが欠けています。

Google I/O 2016プレゼンテーションではすべてhereが説明されています。それを見てみましょう。

+0

それは私も同様に考えていた。 JobScheduler内のGoogleAPICクライアントへの接続をどうやって処理しましたか? blockingConnectをタイムアウトまたは別の方法で使用していますか? – pkramaric

+0

非ブロック[connect()](https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.html#connect())メソッドを使用しています接続結果に応じてジョブを処理します(onConnected、onConnectionFailedの各メソッド)。 – kws

0

更新をリクエストすると、最大頻度をリクエストできます。単にサービスを使用し、最大頻度をあなたが望むポーリング間隔と同じに設定してください。 AlarmManagerは必要ありません。

+0

私は、最大周波数が数時間離れている(ユーザーが定義している)場合、最も効率的なアプローチであるかどうかは分かりませんでした。多分FusedLocationApiを開始/停止する方が効率的だと思いました。 – pkramaric

関連する問題