边界用于定义应用可以响应的一个或多个上下文条件。当栅栏的状态发生变化时,您的应用会收到回调。
栅栏有两种类型:基元栅栏,表示一组基本上下文信号;组合栅栏,使用布尔运算符组合多个基元栅栏。所有围栏都是 AwarenessFence
的实例。
创建基元栅栏
基元屏障(表示一组基本情境信号)在 awareness.fence
软件包中定义。以下示例展示了如何创建一个简单的围栏,当用户的检测到的活动为 WALKING
时为 TRUE
,否则为 FALSE
:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
在前面的示例中,DetectedActivityFence
是通过调用 during
创建的,这意味着每当用户处于 WALKING
状态时,该栅栏便处于 TRUE
状态。
响应转场
除了 TimeFence
之外,每个基元栅栏类型也可以在上下文状态转换时暂时触发。例如,您可以设置 DetectedActivityFence
,以便在用户starting
或stopping
某个 activity 时暂时触发。转换栅栏会在 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));
后续步骤:注册围栏。