创建围栏

围栏定义了应用可以响应的一个或多个情境条件。当围栏的状态发生变化时,您的应用会收到回调。

围栏分为两种类型:原始围栏(表示基本情境信号集)和组合围栏(使用布尔运算符组合多个原始围栏)。所有围栏都是 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));

下一步:注册围栏。