Ограждение определяет одно или несколько контекстных условий, на которые может реагировать ваше приложение. Когда состояние ограждения меняется, ваше приложение получает обратный вызов.
Существует два типа ограждений: простые, которые представляют собой базовый набор сигналов контекста, и комбинированные, которые объединяют несколько простых ограждений с помощью логических операторов. Все ограждения являются экземплярами AwarenessFence.
Как создать примитивное ограждение
Примитивные ограждения, представляющие собой базовый набор контекстных сигналов, определены в пакете awareness.fence. В следующем примере показано, как создать простой геозону, которая будет TRUE, если обнаруженная активность пользователя – WALKING, и FALSE в противном случае:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
В предыдущем примере DetectedActivityFence создается вызовом during, что означает, что геозона находится в состоянии TRUE, когда пользователь WALKING.
Реагирование на переходы
Каждый тип ограждения, кроме TimeFence, может быть временно активирован при переходе контекста. Например, вы можете настроить DetectedActivityFence так, чтобы он временно активировался, когда пользователь starting или stopping. Геозоны перехода находятся в состоянии 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));
Следующий шаг – зарегистрировать ограждение.