Criar uma grade

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.