围栏定义了应用可以响应的一个或多个情境条件。当围栏的状态发生变化时,您的应用会收到回调。
围栏分为两种类型:原始围栏(表示基本情境信号集)和组合围栏(使用布尔运算符组合多个原始围栏)。所有围栏都是 AwarenessFence 的实例。
创建原始围栏
基本围栏表示一组基本情境信号,在 awareness.fence 软件包中定义。以下示例展示了如何创建一个简单的围栏,当检测到用户的活动为 WALKING 时,该围栏为 TRUE,否则为 FALSE:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
在前面的示例中,DetectedActivityFence 是通过调用 during 创建的,这意味着只要用户WALKING,围栏就会处于 TRUE 状态。
对过渡做出响应
除 TimeFence 之外,每种原始围栏类型也可以在情境状态转换时瞬间触发。例如,您可以设置一个 DetectedActivityFence,使其在用户starting或stopping某项活动时瞬间触发。转换围栏在再次变为 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 米或自当前时间起已过去一个多小时,该围栏就会触发。
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));
下一步:注册围栏。