Criar uma grade

Uma cerca define uma ou mais condições de contexto às quais seu app pode reagir. Quando o estado de uma cerca muda, seu app recebe um callback.

Há dois tipos de barreiras: primitivas, que representam o conjunto básico de sinais de contexto, e combinadas, que combinam várias barreiras primitivas com o uso de operadores booleanos. Todas as barreiras são instâncias de AwarenessFence.

Criar uma cerca primitiva

As barreiras primitivas, que representam o conjunto básico de indicadores de contexto, são definidas no pacote awareness.fence. O exemplo a seguir mostra a criação de uma cerca simples que é TRUE quando a atividade detectada do usuário é WALKING, e FALSE caso contrário:

AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);

No exemplo anterior, o DetectedActivityFence foi criado por uma chamada para during, o que significa que a cerca está no estado TRUE sempre que o usuário está WALKING.

Reagir a transições

Cada tipo de cerca primitiva, exceto TimeFence, também pode ser acionado momentaneamente quando o estado do contexto muda. Por exemplo, é possível definir um DetectedActivityFence para acionar momentaneamente quando um usuário estiver starting ou stopping uma atividade. As barreiras de transição ficam no estado TRUE por alguns segundos antes de voltarem a FALSE.

Criar uma cerca de combinação

As barreiras de combinação combinam vários tipos de barreiras primitivas com o uso de operadores booleanos. O exemplo a seguir mostra a criação de uma cerca combinada que é ativada quando o usuário caminha e os fones de ouvido estão conectados:

// 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
);

Árvores aninhadas de AND, OR e NOT são válidas, então qualquer combinação booleana de barreiras é possível. O exemplo a seguir mostra uma cerca que é acionada quando um usuário se move mais de 100 metros do local atual, ou mais de uma hora se passou desde o horário atual.

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));

Próxima etapa: registrar uma cerca.