Crea un recinto

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.