Una valla define una o más condiciones de contexto a las que tu app puede reaccionar. Cuando cambia el estado de una valla, tu app recibe una devolución de llamada.
Hay dos tipos de vallas: cercos primitivos, que representan el conjunto básico de indicadores de contexto, y vallas de combinación, que combinan múltiples vallas primitivas con el uso de operadores booleanos. Todas las vallas son instancias de AwarenessFence
.
Crea una valla primitiva
Las vallas básicas, 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 valla simple que es TRUE
cuando la actividad detectada del usuario es WALKING
y, de lo contrario, FALSE
:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
En el ejemplo anterior, DetectedActivityFence
se creó mediante una llamada a during
, lo que significa que la valla tiene el estado TRUE
cada vez que el usuario está WALKING
.
Reacciona a las transiciones
Cada tipo de valla primitiva, con la excepción de TimeFence
, también se puede activar por un momento cuando se realiza la transición del estado del contexto. Por ejemplo, puedes configurar un objeto DetectedActivityFence
para que se active de manera temporal cuando un usuario sea starting
o stopping
una actividad. Las vallas de transición permanecen en el estado TRUE
durante unos segundos antes de volver a cambiar a FALSE
.
Cómo crear una valla de combinación
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 valla de combinación que se activa cuando el usuario camina y se conectan los auriculares:
// 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 cerca que se activa cuando un usuario se mueve a más de 100 metros de distancia de la ubicación actual, o más de una hora transcurrido desde ese momento.
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));
Paso siguiente: Registra una valla.