フェンスは、アプリが反応できる 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 時間以上経過した場合にトリガーされるフェンスを示しています。 or
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));
次のステップ: フェンスを登録する。