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