Ein Fence definiert eine oder mehrere Kontextbedingungen, auf die Ihre App reagieren kann. Wenn sich der Status eines Fences ändert, erhält Ihre App einen Callback.
Es gibt zwei Arten von Fences: primitive Fences, die die grundlegenden Kontextsignale darstellen, und kombinierte Fences, die mehrere primitive Fences mithilfe boolescher Operatoren kombinieren. Alle Fences sind Instanzen von AwarenessFence.
Primitiven Fence erstellen
Primitive Fences, die die grundlegenden Kontextsignale darstellen, werden definiert
im awareness.fence
Paket. Das folgende Beispiel zeigt die Erstellung eines einfachen Fences, der TRUE
ist, wenn die erkannte Aktivität des Nutzers WALKING,
und FALSE andernfalls:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Im vorherigen Beispiel wurde der DetectedActivityFence
durch einen Aufruf von during erstellt. Das bedeutet, dass der Fence den Status TRUE hat, wenn der Nutzer WALKING ist.
Auf Übergänge reagieren
Jeder primitive Fence-Typ mit Ausnahme von TimeFence kann auch kurzzeitig ausgelöst werden, wenn sich der Kontextstatus ändert. Sie können beispielsweise einen DetectedActivityFence so festlegen, dass er kurzzeitig ausgelöst wird, wenn ein Nutzer eine Aktivität
starting
oder
stopping. Übergangs-Fences haben einige Sekunden lang den Status TRUE, bevor sie wieder FALSE werden.
Kombinierten Fence erstellen
Kombinierte Fences kombinieren mehrere primitive Fence-Typen mithilfe boolescher Operatoren. Das folgende Beispiel zeigt die Erstellung eines kombinierten Fences, der aktiviert wird, wenn der Nutzer geht und die Kopfhörer angeschlossen sind:
// 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
);
Verschachtelte Bäume von AND, OR und NOT sind gültig, sodass jede boolesche Kombination von Fences möglich ist. Das folgende Beispiel zeigt einen Fence, der ausgelöst wird, wenn sich ein Nutzer mehr als 100 Meter vom aktuellen Standort entfernt oder mehr als eine Stunde seit der aktuellen Zeit vergangen ist.
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));
Nächster Schritt: Fence registrieren.