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.