Zaun erstellen

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.