システムはそれらを永続化していますか、それとも再起動後に再度追加する必要がありますか? https://developer.android.com/training/location/geofencing.htmlのドキュメントでそれについて何も見つかりませんでした
3 に答える
ジオフェンスは再起動時に保持されません。
BOOT_COMPLETEDアクションをリッスンし、ジオフェンスを再度追加する必要があります。
注:アプリが外部ストレージ (SD カード)にインストールされている場合、起動完了アクションは表示されません。そのため、 で指定する必要android:installLocation="internalOnly"
がありますmanifest tag
。これは、Android デバイスが外部ストレージを設定する前にBOOT_COMPLETED アクションをブロードキャストするためです。
これを確認するドキュメントは見つかりませんでしたが、私自身の実験では、再起動しても保持されないことが示されています。
私のセットアップは次のとおりです。
- アプリケーションを実行
- アプリケーションは、最初の起動時に NEVER_EXPIRE としてのみさまざまなジオフェンスを設定します
- アプリケーションを終了
- フェンスで囲まれた地域で電話を使用する
- フェンスが IntentService に送信される保留中のインテントをトリガーすることを確認します
- 地域を離れる
- 電話を再起動する
- 地域に再び入る
- 保留中のインテントが IntentService に送信されない
これについて Google の誰かから詳しい情報をお持ちの場合は、コメントしてください。
どのデータを保持しますか? デバイスのジオフェンス リージョンですか、それとも Google Play Service Location API によって保存されたジオフェンス リージョンですか?
デバイスは地域 (緯度、経度、半径で定義) を Google Play サービスに (LocationClient 経由で) 登録する必要があると思います。また、有効期限、通知を受け取る遷移タイプ、および通知元のインテントを提供する必要があります。
このリージョンは、アプリではなく (リモートで) 保存されます。有効期限が過ぎると、Google Play Service によって自動的に削除されます。NEVER_EXPIRE として設定することもできます。リージョンがまだ期限切れになっていない場合、Google Play Service は (addGeofences を呼び出すときに送信するインテントを介して) アプリに通知します。
地域のソース (緯度、経度、半径) は実装次第です。