Ein Fence definiert eine oder mehrere Kontextbedingungen, auf die deine App reagieren kann. Wenn sich der Status eines Fence ändert, erhält Ihre App einen Callback.
Es gibt zwei Arten von Zäunen: primitive Zäune, die die grundlegenden Kontextsignale darstellen, und Kombinationszäune, die mehrere primitive Zäune mithilfe von booleschen Operatoren kombinieren. Alle Geofences sind Instanzen von AwarenessFence.
Einfachen Zaun erstellen
Primitive Fences, die die grundlegenden Kontextsignale darstellen, sind im Paket awareness.fence definiert. Im folgenden Beispiel wird ein einfacher Fence erstellt, der TRUE ist, wenn die erkannte Aktivität des Nutzers WALKING ist, und andernfalls FALSE:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Im vorherigen Beispiel wurde der DetectedActivityFence durch einen Aufruf von during erstellt. Das bedeutet, dass sich der Fence 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 festlegen, dass er kurzzeitig ausgelöst wird, wenn ein Nutzer eine Aktivität starting oder stopping. Übergangs-Geofences befinden sich einige Sekunden lang im Status TRUE, bevor sie wieder zu FALSE werden.
Kombinierten Geofence erstellen
Kombinations-Fences kombinieren mehrere primitive Fence-Typen mithilfe von booleschen Operatoren. Im folgenden Beispiel wird ein kombinierter Fence 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, sodass jede boolesche Kombination von Zäunen möglich ist. Im folgenden Beispiel wird ein Fence ausgelöst, 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: Geofence registrieren