web-dev-qa-db-ja.com

Androidジオフェンスの出入り通知の一貫性を高める方法は?

組み込みのジオフェンスAPI(Play開発者サービス)を使用していますが、結果はまちまちです。ジオフェンスを設定した後、GPSがオンの場合でも、最新の位置(LocationClientが接続され、バックグラウンドで実行されている)で、出入りの通知に非常に一貫性がないようです。位置の変化の監視(ポーリング)を開始し、デバッグテキストフィールドの距離。デバイスによって登録された場所とジオフェンスの場所に基づいていても、技術的にはジオフェンスの内側/外側にいる場合でも、通知がトリガーされる場合とトリガーされない場合があります。これをより予測可能にする方法はありますか?私はこのAPIを放棄し、デバイスの場所のポーリングに基づいて独自の(バッテリーを消耗する)ジオフェンスを実装したいと思っています。

24
oviroa

いくつかの提案:

  1. トランジションを受信するためにサービスではなくBroadcastReceiverを使用していることを確認してください。そうしないと、アプリが強制終了またはオフになった場合に、それを取得できない/取得しない可能性があります。ここで説明するように: Android Geofenceは最終的に移行インテントの取得を停止します

  2. デバイスを再起動した後、できればブートブロードキャストレシーバーを使用して、ジオフェンスを再作成してください。ここで説明するように: ジオフェンスはAndroid)でアクティブなままですか

  3. もう1つのよくある誤解は、IOSとは異なるため、私を困惑させました。デバイスがジオフェンス内にいることを検出した場合、新しく作成されたジオフェンスのトリガーを常にすぐに取得するということです。作成時に、新しく作成したジオフェンスの「猶予期間」を使用してこれを自分で解決しました。これについては、このスレッドで説明しました。 addProximityAlertが期待どおりに機能しません

最後に1つの重要なこと:LocationClientをアプリに接続するかどうかはまったく問題になりませんif上記のポイントに従います。コードでジオフェンスを追加または削除するプロセスは、基本的に次のとおりです。

  1. Locationclientを作成して接続します。

  2. 接続コールバックで、ジオフェンスの追加/削除を行います

  3. Geofence-resultコールバックで、locationclientを切断します。

これが発生するたびに、私のロケーションクライアントは合計で数秒しか接続されません。オペレーティングシステムは引き続きジオフェンスアラートを生成し、発生するたびにBroadcastReceiverを呼び出します。

あなたがこれらのことをするならば、私はあなたの経験が改善するに違いない。

お役に立てれば!

45
Mathias