Crea una cerca

Una valla define una o más condiciones de contexto a 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 vallas primitivas, que representan el conjunto básico de indicadores de contexto, y las vallas de combinación, 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 awareness.fence paquete. 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 en caso contrario:

AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);

En el ejemplo anterior, se creó DetectedActivityFence con una llamada a during, lo que significa que la valla está en 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 momentáneamente cuando el estado del contexto cambia. Por ejemplo, puedes configurar un DetectedActivityFence para que se active momentáneamente cuando un usuario está starting o stopping una actividad. Las vallas de transición están en el estado TRUE durante unos segundos antes de volver a FALSE.

Crea 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 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 valla que se activa cuando un usuario se mueve más de 100 metros de la ubicación actual o cuando 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 una valla.