Criar uma grade

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.