Ein Fence definiert eine oder mehrere Kontextbedingungen, auf die Ihre App reagieren kann. Wenn sich der Status eines Geofence ändert, erhält Ihre App einen Callback.
Es gibt zwei Arten von Fences: Primitive Fences, die den grundlegenden Satz von Kontextsignalen darstellen, und Combination Fences, die mehrere Primitive Fences mithilfe von booleschen Operatoren kombinieren. Alle Fences sind Instanzen von AwarenessFence.
Einfachen Geofence erstellen
Primitive Fences, die die grundlegenden Kontextsignale darstellen, werden 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 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 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 festlegen, der kurzzeitig ausgelöst wird, wenn ein Nutzer starting oder stopping ist. Übergangszonen sind einige Sekunden lang im Status TRUE, bevor sie wieder FALSE werden.
Kombinationszaun erstellen
Kombinationszäune kombinieren mehrere primitive Zauntypen 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 ausgelöst, 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