Un límite define una o más condiciones de contexto a las que puede reaccionar tu app. Cuando cambia el estado de un perímetro, tu app recibe una devolución de llamada.
Existen dos tipos de cercas: las primitivas, que representan el conjunto básico de indicadores de contexto, y las combinadas, que combinan varias cercas primitivas con el uso de operadores booleanos. Todas las cercas son instancias de AwarenessFence
.
Crea una cerca primitiva
Los límites primitivos, 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 un perímetro simple que es TRUE
cuando la actividad detectada del usuario es WALKING
y FALSE
de lo contrario:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
En el ejemplo anterior, DetectedActivityFence
se creó mediante una llamada a during
, lo que significa que la cerca está en el estado TRUE
cada vez que el usuario está en WALKING
.
Cómo reaccionar a las transiciones
Cada tipo de cerca primitiva, con la excepción de TimeFence
, también se puede activar de forma momentánea cuando el estado del contexto realiza transiciones. Por ejemplo, puedes configurar un DetectedActivityFence
para que se active momentáneamente cuando un usuario starting
o stopping
una actividad. Los límites de transición se encuentran en el estado TRUE
durante unos segundos antes de volver a ser FALSE
.
Crea una cerca combinada
Los cercos combinados combinan varios tipos de cercas primitivas con el uso de operadores booleanos. En el siguiente ejemplo, se muestra la creación de una cerca combinada 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 cercas. En el siguiente ejemplo, se muestra un perímetro que se activa cuando un usuario se mueve más de 100 metros de la ubicación actual o si transcurrió 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 un perímetro.