建立圍欄

柵欄定義了應用程式可回應的一或多個情境條件。柵欄的狀態變更時,應用程式會收到回呼。

圍欄分成兩種類型:原始柵欄 (代表基本的結構定義) 和圍欄,結合多個原始圍欄和布林運算子。所有柵欄都是 AwarenessFence 的執行個體。

建立原始圍欄

awareness.fence 套件定義了基本內容圍欄 (代表基本的內容信號集)。以下範例說明當使用者偵測到的活動是 WALKING 時,其中一個簡易的圍欄為 TRUE,否則為 FALSE

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

在上述範例中,呼叫 DetectedActivityFence 是透過呼叫 during 的方式建立,這表示每次使用者為 WALKING 時,柵欄都處於 TRUE 狀態。

回應轉場效果

結構定義環境轉換時,也可能會同時觸發每個原始圍欄類型 (TimeFence 除外)。舉例來說,您可以設定 DetectedActivityFence,在使用者於 startingstopping 特定活動時立即觸發。轉換柵欄會處於 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 公尺「或」超過一小時後觸發的柵欄。

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

下一步:註冊圍欄