Um limite define uma ou mais condições contextuais às quais seu app pode reagir. Quando o estado de um limite muda, seu app recebe um callback.
Há dois tipos de limites: limites primitivos, que representam o conjunto básico de sinais de contexto, e combinações de limite, que combinam vários limites primitivos com o uso de operadores booleanos. Todos os limites são instâncias de AwarenessFence
.
Criar um limite primitivo
Os limites primários, que representam o conjunto básico de sinais de contexto, são definidos
no pacote
awareness.fence
. O exemplo a seguir mostra a criação de um limite simples que é TRUE
quando a atividade detectada do usuário é WALKING
,
caso contrário, FALSE
:
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, você pode
definir um DetectedActivityFence
para ser acionado momentaneamente quando um usuário for
starting
ou
stopping
uma atividade. Os limites de transição ficam no estado TRUE
por alguns segundos antes
de virarem FALSE
novamente.
Criar um limite de combinação
Os limites de combinação combinam vários tipos de limite primitivos com o uso de operadores booleanos. O exemplo a seguir mostra a criação de um limite de combinação que é ativado quando o usuário anda 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. Portanto, qualquer combinação booleana de limites é possível. O exemplo a seguir mostra um limite que é acionado quando um usuário se move a mais de 100 metros do local atual ou mais de uma hora se passou desde o momento 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 um limite.