フェンスの作成

フェンスは、アプリが反応できるコンテキスト条件を 1 つ以上定義します。フェンスの状態が変化すると、アプリはコールバックを受け取ります。

フェンスには、コンテキスト シグナルの基本セットを表すプリミティブ フェンスと、ブール演算子を使用して複数のプリミティブ フェンスを組み合わせる組み合わせフェンスの 2 種類があります。すべてのフェンスは AwarenessFence のインスタンスです。

プリミティブ フェンスを作成する

プリミティブ フェンス(コンテキスト シグナルの基本セットを表すもの)は、awareness.fence パッケージで定義されています。次の例は、ユーザーの検出されたアクティビティが WALKING の場合に TRUE、それ以外の場合は FALSE となるシンプルなフェンスを作成する方法を示しています。

AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);

上の例では、during の呼び出しによって DetectedActivityFence が作成されています。つまり、ユーザーが WALKING の場合、フェンスは常に TRUE 状態になります。

遷移に反応する

TimeFence を除く各プリミティブ フェンス タイプは、コンテキストの状態が遷移したときに一時的にトリガーすることもできます。たとえば、ユーザーがアクティビティをstartingまたはstoppingしているときに、DetectedActivityFence を一時的にトリガーするように設定できます。遷移フェンスは、数秒間 TRUE 状態になってから、再び FALSE になります。

組み合わせフェンスを作成する

組み合わせフェンスは、ブール演算子を使用して複数のプリミティブ フェンス タイプを組み合わせたものです。次の例は、ユーザーが歩いているときにヘッドフォンが接続されている場合に有効になる組み合わせフェンスを作成する方法を示しています。

// 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
);

ANDORNOT のネストされたツリーは有効であるため、フェンスのブール値の組み合わせは任意です。次の例は、ユーザーが現在の位置から 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));

次のステップ: フェンスを登録する