Crea un recinto

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

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

Crea un recinto primitivo

Le barriere primitive, che rappresentano l'insieme di base degli indicatori di contesto, sono definite nel pacchetto awareness.fence. L'esempio seguente mostra la creazione di un semplice recinto che è TRUE quando l'attività rilevata dell'utente è WALKING, e FALSE altrimenti:

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

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

Reagire alle transizioni

Ogni tipo di recinto primitivo, ad eccezione di TimeFence, può anche essere attivato momentaneamente quando lo stato del contesto cambia. Ad esempio, puoi impostare un DetectedActivityFence in modo che si attivi momentaneamente quando un utente starting o stopping un'attività. I recinti di transizione si trovano nello stato TRUE per alcuni secondi prima di tornare allo stato FALSE.

Crea un recinto combinato

I recinti combinati uniscono più tipi di recinti primitivi con l'uso di operatori booleani. L'esempio seguente mostra la creazione di un recinto virtuale combinato 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 un recinto virtuale che viene attivato quando un utente si sposta di oltre 100 metri dalla posizione corrente o è trascorso più di un'ora dall'ora corrente.

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 un recinto.