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.