Crea un recinto

Un recinto definisce una o più condizioni di contesto a cui la tua app può reagire. Quando lo stato di una recinzione cambia, la tua app riceve un callback.

Esistono due tipi di recinti: i recinti primitivi, che rappresentano l'insieme di base dei segnali di contesto, e i recinti combinati, che combinano più recinti primitivi con l'uso di operatori booleani. Tutti i recinti sono istanze di AwarenessFence.

Crea una recinzione primitiva

Le recinzioni primitive, che rappresentano l'insieme di base degli indicatori contestuali, sono definite nel pacchetto awareness.fence. L'esempio seguente mostra la creazione di una recinzione semplice che è TRUE quando l'attività rilevata dell'utente è WALKING, e FALSE in caso contrario:

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

Nell'esempio precedente, DetectedActivityFence è stato creato da una chiamata a during, il che significa che la recinzione è nello stato TRUE ogni volta che l'utente è WALKING.

Reagire alle transizioni

Ogni tipo di recinzione primitiva, ad eccezione di TimeFence, può anche essere attivato momentaneamente quando lo stato del contesto cambia. Ad esempio, puoi impostare un DetectedActivityFence da attivare momentaneamente quando un utente starting o stopping un'attività. Le recinzioni di transizione rimangono nello stato TRUE per alcuni secondi prima di tornare allo stato FALSE.

Creare una recinzione combinata

Le recinzioni combinate combinano più tipi di recinzioni primitive con l'utilizzo di operatori booleani. L'esempio seguente mostra la creazione di una recinzione combinata che si attiva quando l'utente cammina e le cuffie sono collegate:

// 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
);

Gli alberi nidificati di AND, OR e NOT sono validi, quindi è possibile qualsiasi combinazione booleana di recinti. L'esempio seguente mostra una recinzione attivata quando un utente si sposta di oltre 100 metri dalla posizione attuale, o è trascorsa più di un'ora dall'ora attuale.

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));

Passaggio successivo: registra una recinzione.