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 recinzioni: recinzioni primitive, che rappresentano l'insieme di base dei segnali di contesto, e recinti combinati, che combinano più recinzioni primitive con l'uso di operatori booleani. Tutte le recinzioni sono istanze di AwarenessFence.

Crea un recinto primitivo

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

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.

Aggiungi reazione alle transizioni

Ogni tipo di recinzione primitiva, ad eccezione di TimeFence, può essere attivato temporaneamente anche durante la transizione dello stato del contesto. Ad esempio, puoi impostare un attivatore DetectedActivityFence in modo che venga attivato temporaneamente quando un utente è starting o stopping un'attività. Le recinzioni di transizione rimarranno in stato TRUE per qualche secondo prima di FALSE.

Crea una combinazione di recinzioni

Le recinzioni combinate combinano più tipi di recinzioni primitive con l'uso di operatori booleani. L'esempio seguente mostra la creazione di una combinazione di recinzioni che si attiva quando l'utente cammina e si collegano le cuffie:

// 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, pertanto è possibile qualsiasi combinazione booleana di recinzioni. L'esempio seguente mostra una recinzione che viene attivata quando un utente si trova a più di 100 metri di distanza dalla posizione corrente o è trascorsa 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.