柵欄定義了應用程式可回應的一或多個情境條件。柵欄的狀態變更時,應用程式會收到回呼。
圍欄分成兩種類型:原始柵欄 (代表基本的結構定義) 和圍欄,結合多個原始圍欄和布林運算子。所有柵欄都是 AwarenessFence
的執行個體。
建立原始圍欄
awareness.fence
套件定義了基本內容圍欄 (代表基本的內容信號集)。以下範例說明當使用者偵測到的活動是 WALKING
時,其中一個簡易的圍欄為 TRUE
,否則為 FALSE
:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
在上述範例中,呼叫 DetectedActivityFence
是透過呼叫 during
的方式建立,這表示每次使用者為 WALKING
時,柵欄都處於 TRUE
狀態。
回應轉場效果
結構定義環境轉換時,也可能會同時觸發每個原始圍欄類型 (TimeFence
除外)。舉例來說,您可以設定 DetectedActivityFence
,在使用者於 starting
或 stopping
特定活動時立即觸發。轉換柵欄會處於 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
);
AND
、OR
和 NOT
的巢狀樹狀結構有效,因此可使用任何布林值的柵欄。以下範例說明使用者從目前位置移動超過 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));
下一步:註冊圍欄。