创建栅栏

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

栅栏有两种类型:原始栅栏(表示基本的上下文信号集)和组合栅栏(将多个原始栅栏与布尔运算符结合使用)。所有栅栏都是 AwarenessFence 的实例。

创建原始栅栏

原始栅栏代表一组基本的情境信号,在 awareness.fence 软件包中定义。以下示例展示了如何在用户检测到的 activity 为 WALKING 时创建简单的栅栏,其值为 TRUE:否则为 FALSE

AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);

在上述示例中,DetectedActivityFence 是通过调用 during 创建的,这意味着每当用户处于 WALKING 状态时,栅栏就会处于 TRUE 状态。

响应过渡

当上下文状态转换时,每个初始栅栏类型(TimeFence 除外)也可以短暂触发。例如,您可以设置 DetectedActivityFence,使其在用户 startingstopping 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
);

ANDORNOT 的嵌套树均有效,因此任何布尔栅栏组合都可能。以下示例展示了当用户从当前位置移动 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));

下一步:注册栅栏