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.