Создать забор

Забор определяет одно или несколько контекстных условий, на которые может реагировать ваше приложение. При изменении состояния забора ваше приложение получает обратный вызов.

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

Следующий шаг: регистрация забора .