Ограждение определяет одно или несколько условий контекста, на которые может реагировать ваше приложение. Когда состояние ограждения изменяется, ваше приложение получает обратный вызов.
Существует два типа ограждений: примитивные ограждения, которые представляют собой базовый набор контекстных сигналов, и комбинированные ограждения, которые объединяют несколько примитивных ограждений с использованием булевых операторов. Все ограждения являются экземплярами 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));
Следующий шаг: регистрация забора .