インストールされているアプリケーションの存続期間中に誰かが複数のサイトに出入りするときにジオフェンシングを使用する必要があるアプリケーションを作成しています。
私のジオフェンシングの実装 (以下の 2 番目のリンクと非常によく似ています) は、最初にアプリケーションをインストールしたとき、ジオフェンスに出入りするとき、およびモックの場所を使用してシミュレートするときの両方で、デバイスが再起動されるまで、すべて正常に動作します。
再起動時に、場所を模擬したり、実際にジオフェンスに出入りしたりしても、イベントがトリガーされたり、保留中のインテントがブロードキャスト レシーバーに送信されたりすることはありません。
私は次の3つのリンクを見て、かなりのドキュメントも読みましたが、再起動後に登録されたジオフェンスが持続するか持続しないかをまっすぐに言う決定的な答えを見つけることができません.
これらは、スタック オーバーフローで確認したリンクです: Android ジオフェンスは再起動に耐えますか?
Android ジオフェンスは、最終的に遷移インテントの取得を停止します
Android ジオフェンスは、削除/期限切れになるまでアクティブのままですか、それとも PendingIntent が起動されるまでのみアクティブのままですか
誰かがたまたま再起動後に固執するかどうかの答えを知っている場合、またはそうでない場合は回避策がある場合は、大歓迎です! 私の最後の希望は、BOOT_COMPLETED のリスナーを作成し、起動時に再登録することですが、絶対に必要な場合にのみこれを行うことを好みます。
よろしくお願いします!
編集:決定的な(書面による)回答は見つかりませんでしたが、TonyC氏が投稿したものが正しいと確信しており、その解決策を選択しました。どうもありがとうTonyC!
誰かが私が持っているソリューションを見たい場合に備えて、デバイスの起動時に起動完了アクションをリッスンし、必要なすべてのジオフェンスを再登録します。
これはマニフェストにあります:
<!-- Listen for the device starting up -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name="com.YOUR.PACKAGE.geofence.BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
次に、ブート時にジオフェンスを再登録するブロードキャスト レシーバーを作成します。
package com.YOUR.PACKAGE.geofence;
import android.app.PendingIntent.CanceledException;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.Geofence;
public class BootCompleteReceiver extends WakefulBroadcastReceiver
{
private static final String TAG = "BootCompleteReceiver";
@Override
public void onReceive(Context context, Intent intent)
{
//Do what you want/Register Geofences
}
}
また、起動時にジオフェンス内にいる場合、通常、ジオフェンスが登録されると、ジオフェンスの保留中の意図がトリガーされることにも注意してください。
たとえば、ジオフェンスがアプリを起動した場合、たまたまジオフェンス内にあるデバイスを起動すると、起動完了ブロードキャスト レシーバーがジオフェンスを登録し、位置情報サービスがどこにあるかを特定すると、アプリも開きます。それは。
それが誰かの助けになることを願っています。