Crea una cerca

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 geovallas: las primitivas, que representan el conjunto básico de indicadores de contexto, y las combinadas, que unen varias geovallas 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 valla 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, se creó DetectedActivityFence con una llamada a during, lo que significa que la geovalla se encuentra en el estado TRUE cada vez que el usuario está WALKING.

Reacciona a las transiciones

Cada tipo de geovalla primitiva, con la excepción de TimeFence, también se puede activar momentáneamente cuando cambia el estado del contexto. Por ejemplo, puedes configurar un DetectedActivityFence para que se active momentáneamente cuando un usuario starting o stopping una actividad. Las geovallas de transición están en el estado TRUE durante unos segundos antes de volver a FALSE.

Cómo crear una cerca combinada

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 geovalla 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 cualquier combinación booleana de barreras es posible. En el siguiente ejemplo, se muestra una valla que se activa cuando un usuario se mueve 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.