栅栏定义了您的应用可以响应的一个或多个上下文条件。当栅栏的状态发生变化时,您的应用会收到回调。
栅栏有两种类型:原始栅栏(表示基本的上下文信号集)和组合栅栏(将多个原始栅栏与布尔运算符结合使用)。所有栅栏都是 AwarenessFence
的实例。
创建原始栅栏
原始栅栏代表一组基本的情境信号,在 awareness.fence
软件包中定义。以下示例展示了如何在用户检测到的 activity 为 WALKING
时创建简单的栅栏,其值为 TRUE
:否则为 FALSE
:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
在上述示例中,DetectedActivityFence
是通过调用 during
创建的,这意味着每当用户处于 WALKING
状态时,栅栏就会处于 TRUE
状态。
响应过渡
当上下文状态转换时,每个初始栅栏类型(TimeFence
除外)也可以短暂触发。例如,您可以设置 DetectedActivityFence
,使其在用户 starting
或 stopping
activity 时立即触发。过渡栅栏在再次开启 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));
下一步:注册栅栏。