フェンスは、アプリが応答できる 1 つ以上のコンテキスト条件を定義します。フェンスの状態が変化すると、アプリはコールバックを受け取ります。
フェンスには 2 種類あります。コンテキスト シグナルの基本的なセットを表すプリミティブ フェンスと、ブール演算子を使用した複数のプリミティブ フェンスの組み合わせです。すべてのフェンスは AwarenessFence
のインスタンスです。
プリミティブ フェンスを作成する
コンテキスト シグナルの基本セットを表すプリミティブ フェンスは、awareness.fence
パッケージで定義されています。次の例は、検出されたアクティビティが WALKING
の場合は TRUE
、それ以外の場合は FALSE
の単純なフェンスを作成します。
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
上記の例では、DetectedActivityFence
は during
の呼び出しによって作成されています。つまり、ユーザーが WALKING
になるとフェンスは TRUE
状態になります。
遷移に反応する
TimeFence
を除いて、各プリミティブ フェンスは、コンテキスト状態が遷移したときに一時的にトリガーされることもあります。たとえば、ユーザーが starting
または stopping
になったときに一時的にトリガーされるように DetectedActivityFence
を設定できます。遷移フェンスは、FALSE
が再びオンになるまで数秒間 TRUE
状態になります。
コンビネーション フェンスを作成する
複数のプリミティブ フェンスとブール演算子を使用して組み合わせたフェンス。次の例は、ユーザーが徒歩ヘッドフォンを接続するとアクティブになるフェンスを作成する方法を示しています。
// Create the primitive fences.
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
AwarenessFence headphoneFence = HeadphoneFence.during(HeadphoneState.PLUGGED_IN);
// Create a combination fence to AND primitive fences.
AwarenessFence walkingWithHeadphones = AwarenessFence.and(
walkingFence, headphoneFence
);
AND
、OR
、NOT
のネストされたツリーは有効であるため、フェンスのブール値の組み合わせが可能です。次の例は、ユーザーが現在地から 100 メートルを超えて移動したとき、または現在の時刻から 1 時間以上経過したときにトリガーされるフェンスを示しています。
double currentLocationLat; // current location latitude
double currentLocationLng; // current location longitude
long nowMillis = System.currentTimeMillis();
long oneHourMillis = 1L * 60L * 60L * 1000L;
AwarenessFence orExample = AwarenessFence.or(
AwarenessFence.not(LocationFence.in(
currentLocationLat,
currentLocationLng,
100.0,
100.0,
0L)),
TimeFence.inInterval(nowMillis + oneHourMillis, Long.MAX_VALUE));
次のステップ: フェンスを登録する