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