围栏定义了一个或多个上下文条件,应用可以对这些条件做出反应。 当围栏的状态发生变化时,您的应用会收到回调。
围栏有两种类型:基本围栏(表示基本的一组情境信号)和组合围栏(使用布尔运算符组合多个基本围栏)。所有围栏都是 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 米以外的位置或自当前时间起经过 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));
下一步:注册围栏。