Una recinzione 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: recinti primitivi, che rappresentano l'insieme di base degli indicatori di contesto, e recinti combinati, che combinano più recinti primitivi con l'uso di operatori booleani. Tutti i recinti sono istanze di AwarenessFence
.
Creare una recinzione di base
I recinti primitivi, che rappresentano l'insieme di base di indicatori di contesto, sono definiti nel pacchetto awareness.fence
. L'esempio seguente mostra la creazione di una semplice recinzione 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 recinto primitivo, ad eccezione di TimeFence
, può anche essere attivato temporaneamente durante le transizioni dello stato del contesto. Ad esempio, puoi impostare un DetectedActivityFence
in modo che si attivi temporaneamente quando un utente starting
o stopping
un'attività. I recinti di transizione sono nello stato TRUE
per alcuni secondi prima di diventare di nuovo FALSE
.
Creare una recinzione combinata
I recinti combinati combinano più tipi di recinti primitivi con l'uso 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 che viene attivata quando un utente si allontana per più di 100 metri dalla posizione corrente o è trascorsa 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.