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: einfache Fences, die die grundlegenden Kontextsignale darstellen, und kombinierte Fences, die mehrere einfache Fences mithilfe von booleschen Operatoren kombinieren. Alle Fences sind Instanzen von AwarenessFence
.
Einfache Geofence erstellen
Primitive Fences, die die grundlegenden Kontextsignale darstellen, werden im Paket awareness.fence
definiert. Im folgenden Beispiel wird ein einfacher Zaun erstellt, der TRUE
ist, wenn die erkannte Aktivität des Nutzers WALKING
ist, und FALSE
andernfalls:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Im vorherigen Beispiel wurde DetectedActivityFence
durch einen Aufruf von during
erstellt. Das bedeutet, dass sich der Fence immer dann im Status TRUE
befindet, 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 einstellen, dass er kurz ausgelöst wird, wenn ein Nutzer starting
oder stopping
ist. Übergangszonen befinden sich einige Sekunden lang im Status TRUE
, bevor sie wieder FALSE
werden.
Kombinationsgeofence erstellen
Kombinations-Geofences kombinieren mehrere primitive Geofence-Typen mithilfe von booleschen Operatoren. Im folgenden Beispiel wird ein Kombinations-Geofence erstellt, 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. Daher ist jede boolesche Kombination von Fences möglich. Im folgenden Beispiel wird ein Fence gezeigt, der ausgelöst wird, wenn sich ein Nutzer mehr als 100 Meter vom aktuellen Standort entfernt oder seit der aktuellen Zeit mehr als eine Stunde 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: Geofence registrieren.