私はほとんどユーザーの操作は必要ありませんが、Geofenceが必要なアプリを持っています。バックグラウンドサービス内でこれを完全に実行できますか?バックグラウンドサービス内でAndroidジオフェンシングを完全に実行できますか?
サービスが初めて実行されるときにアクティビティが発生します。このアクティビティはサービスを開始し、BOOT_COMPLETEDのBroadcastReceiverを登録するので、サービスは起動時に開始されます。このアクティビティが再び実行されることはほとんどありません。
このサービスは、Alarmを定期的にオフにするように設定します。これにより、IntentServiceはネットワークからロケーションのリストをダウンロードします。このIntentServiceは、これらの場所の周りにジオフェンスを設定し、場所に近づくと起動するPendingIntentsを作成します。次に、それらのPendingIntentsは別のIntentServiceに何らかのアクションを起こさせます。
これはすべて、バックグラウンドで実行する必要があります。インストール後初めてアクティビティを開始する以外は、ユーザーの操作は必要ありません。したがって、アクティビティはLocationClientまたはロケーションサービスと対話しません。
私は実際にproximityAlertsでこれを設定しましたが、バッテリ寿命の理由から新しいGeofencing APIに移行したいと考えています。しかし、私は、サービス内からLocationClientを使用することにはいくつか問題があると聞いています。具体的には、私が聞いた(申し訳ありませんが、参照は、単に主張を伝聞しない):
- 場所クライアントは、バックグラウンドスレッドから呼び出された場合
- エラーハンドリングするためのUIの可用性に依存している、LocationClient.connectは()それことを前提としてい私たちがこのメソッドをバックグラウンドスレッドで実行しているサービスから呼び出すと、メインのUIスレッド(またはイベントルーパを持つ他のスレッド)から呼び出されます。
調査したところ、私は見ることができませんそれがなぜこのようになるのか、なぜそれが私のやりたいことをやめさせるのか。近接警告のためのほぼドロップインの代替となることを期待していた。
誰かがここに物事を投げ捨てることはできますか?
GeofenceをリストするAPIが見つかりませんでした。また、Geofenceもリストしたいと思っています。私はまた、私のsqlite dbと登録されたフェンスの実際のリストが同期していないことを心配しています... –