Uma cerca define uma ou mais condições de contexto às quais seu app pode reagir. Quando o estado de uma cerca muda, o app recebe um callback.
Há dois tipos de limites: os primitivos, que representam o conjunto básico de indicadores de contexto, e os de combinação, que combinam vários limites primitivos com o uso de operadores booleanos. Todas as cercas são instâncias de AwarenessFence.
Criar uma cerca primitiva
As cercas 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 o limite está no estado TRUE sempre que o usuário está WALKING.
Reagir a transições
Cada tipo de limite primitivo, com exceção de TimeFence, também pode ser
acionado momentaneamente quando o estado do contexto muda. Por exemplo, é possível
definir um DetectedActivityFence para ser acionado momentaneamente quando um usuário estiver
starting
ou
stopping
uma atividade. As cercas de transição ficam no estado TRUE por alguns segundos antes de
voltarem para FALSE.
Criar uma cerca de combinação
As cercas de combinação combinam vários tipos de cercas primitivas com o uso de operadores booleanos. O exemplo a seguir mostra a criação de uma cerca 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 cercas é possível. O exemplo a seguir mostra uma cerca que é
acionada quando um usuário se afasta mais de 100 metros do local atual
ou quando mais de uma hora se passa 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.