Un recinto definisce una o più condizioni di contesto a cui la tua app può reagire. Quando lo stato di un recinto 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.
Creare un recinto primitivo
I recinti primitivi, che rappresentano l'insieme di base dei segnali di contesto, sono definiti
nel awareness.fence
pacchetto. L'esempio seguente mostra la creazione di un recinto semplice che è TRUE
quando l'attività rilevata dell'utente è WALKING,
e FALSE in caso contrario:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Nell'esempio precedente, il DetectedActivityFence
è stato creato da una chiamata a during,
il che significa che il recinto è nello stato TRUE ogni volta che l'utente è WALKING.
Reagire alle transizioni
Ogni tipo di recinto primitivo, ad eccezione di TimeFence, può essere attivato momentaneamente anche 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 sono nello stato TRUE per alcuni secondi prima di tornare a FALSE.
Creare un recinto combinato
I recinti combinati combinano più tipi di recinti primitivi con l'uso di operatori booleani. L'esempio seguente mostra la creazione di un recinto 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
);
Sono validi gli alberi nidificati di AND, OR e NOT, quindi è possibile qualsiasi combinazione booleana di recinti. L'esempio seguente mostra un recinto che viene attivato quando un utente si sposta di più di 100 metri dalla posizione attuale oppure è trascorso 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: registrare un recinto.