Crea una cerca

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.