Uma barreira define uma ou mais condições contextuais às quais seu app pode reagir. Quando o estado de uma barreira muda, seu app recebe um callback.
Há dois tipos de barreiras: primitivas, que representam o conjunto básico de indicadores de contexto, e de combinação, que combinam várias barreiras primitivas com o uso de operadores booleanos. Todas as barreiras são instâncias de AwarenessFence.
Criar uma barreira primitiva
As barreiras primitivas, que representam o conjunto básico de indicadores de contexto, são definidas
no awareness.fence
pacote. O exemplo a seguir mostra a criação de uma barreira 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, a DetectedActivityFence
foi criada por uma chamada para during,
o que significa que a barreira está no estado TRUE sempre que o usuário está WALKING.
Reagir a transições
Cada tipo de barreira primitiva, com exceção de TimeFence, também pode ser acionado momentaneamente quando o estado do contexto faz a transição. Por exemplo, é possível
definir um DetectedActivityFence para ser acionado momentaneamente quando um usuário está
starting
ou
stopping
uma atividade. As barreiras de transição ficam no estado TRUE por alguns segundos antes de voltarem a FALSE.
Criar uma barreira 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 barreira de combinação 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 barreira 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 barreira.