Una valla define una o más condiciones de contexto ante las que puede reaccionar tu app. Cuando cambia el estado de una valla, tu app recibe una devolución de llamada.
Existen dos tipos de vallas: las primitivas, que representan el conjunto básico de indicadores de contexto, y las combinadas, que combinan varias vallas primitivas con el uso de operadores booleanos. Todas las vallas son instancias de AwarenessFence
.
Crea una valla primitiva
Las vallas primitivas, que representan el conjunto básico de indicadores de contexto, se definen en el paquete awareness.fence
. En el siguiente ejemplo, se muestra la creación de una barrera simple que es TRUE
cuando la actividad detectada del usuario es WALKING
y FALSE
en otros casos:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
En el ejemplo anterior, se creó el objeto DetectedActivityFence
con una llamada a during
, lo que significa que la valla está en el estado TRUE
siempre que el usuario esté WALKING
.
Cómo reaccionar a las transiciones
Cada tipo de valla primitiva, con la excepción de TimeFence
, también se puede activar momentáneamente cuando el estado del contexto cambia. Por ejemplo, puedes configurar un DetectedActivityFence
para que se active momentáneamente cuando un usuario starting
o stopping
una actividad. Las barreras de transición se encuentran en el estado TRUE
durante unos segundos antes de volver a estar en el estado FALSE
.
Cómo crear una combinación de vallas
Las vallas de combinación combinan varios tipos de vallas primitivas con el uso de operadores booleanos. En el siguiente ejemplo, se muestra la creación de una combinación de vallas que se activa cuando el usuario camina y los auriculares están 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
);
Los árboles anidados de AND
, OR
y NOT
son válidos, por lo que es posible cualquier combinación booleana de vallas. En el siguiente ejemplo, se muestra una barrera que se activa cuando un usuario se aleja más de 100 metros de la ubicación actual o cuando transcurre más de una hora desde la hora actual.
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óximo paso: Registra una valla.