Ogrodzenie definiuje co najmniej 1 warunek kontekstowy, na który może reagować aplikacja. Gdy stan ogrodzenia się zmieni, aplikacja otrzyma wywołanie zwrotne.
Istnieją 2 rodzaje barier: bariery podstawowe, które reprezentują podstawowy zestaw sygnałów kontekstowych, oraz bariery złożone, które łączą kilka barier podstawowych za pomocą operatorów logicznych. Wszystkie ogrodzenia są instancjami klasy AwarenessFence.
Tworzenie ogrodzenia prymitywnego
Podstawowe ogrodzenia, które reprezentują podstawowy zestaw sygnałów kontekstowych, są zdefiniowane w pakiecie awareness.fence. Poniższy przykład pokazuje, jak utworzyć prosty obszar, który jest TRUE, gdy wykryta aktywność użytkownika to WALKING, a w przeciwnym razie jest FALSE:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
W poprzednim przykładzie DetectedActivityFence został utworzony przez wywołanie during, co oznacza, że ogrodzenie jest w stanie TRUE, gdy użytkownik jest WALKING.
Reagowanie na przejścia
Każdy typ podstawowego ogrodzenia, z wyjątkiem TimeFence, może być również aktywowany na chwilę, gdy zmienia się stan kontekstu. Możesz na przykład ustawić DetectedActivityFence, aby wywołać zdarzenie, gdy użytkownik starting lub stopping aktywność. Geofence przejścia są w stanie TRUE przez kilka sekund, zanim znów zmienią się w FALSE.
Tworzenie ogrodzenia złożonego
Ogrodzenia kombinowane łączą wiele typów ogrodzeń podstawowych za pomocą operatorów logicznych. Poniższy przykład pokazuje tworzenie ogrodzenia kombinowanego, które aktywuje się, gdy użytkownik idzie i słuchawki są podłączone:
// 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
);
Zagnieżdżone drzewa AND, OR i NOT są prawidłowe, więc możliwe są dowolne kombinacje logiczne ogrodzeń. Poniższy przykład pokazuje ogrodzenie, które jest aktywowane, gdy użytkownik oddali się o ponad 100 metrów od bieżącej lokalizacji lub gdy od bieżącej godziny upłynie ponad godzina.
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));
Następny krok: zarejestruj ogrodzenie.