Tworzenie ogrodzenia

Ogrodzeniu można przypisać co najmniej 1 warunek kontekstowy, na który aplikacja może reagować. Gdy zmieni się stan ogrodzenia, Twoja aplikacja otrzyma wywołanie zwrotne.

Istnieją 2 typy ogrodzeń: proste ogrodzenia, które reprezentują podstawowy zestaw sygnałów kontekstowych, oraz ogrodzenia złożone, które łączą wiele prostych ogrodzeń za pomocą operatorów logicznych. Wszystkie ogrodzenia to instancje AwarenessFence.

Tworzenie prymitywnej bariery

Proste ogrodzenia, które stanowią podstawowy zestaw sygnałów kontekstowych, są definiowane w pakiecie awareness.fence. Ten przykład pokazuje tworzenie prostego ogrodzenia, które jest TRUE gdy wykryta aktywność użytkownika to WALKING, a w przeciwnym razie FALSE:

AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);

W poprzednim przykładzie element DetectedActivityFence został utworzony przez wywołanie funkcji during, co oznacza, że ogrodzenie jest w stanie TRUE, gdy użytkownik jest w stanie WALKING.

Reagowanie na przejścia

Każdy typ prymitywnej bariery (z wyjątkiem bariery TimeFence) może być również chwilowo aktywowany podczas przejścia stanu kontekstu. Możesz na przykład ustawić DetectedActivityFence, aby chwilowo aktywować funkcję, gdy użytkownik startinglub stoppingwykonuje jakąś czynność. Ogrodzenia przejściowe są w stanie TRUE przez kilka sekund, zanim znów staną się FALSE.

Tworzenie ogrodzenia złożonego

Ogrodzenia złożone łączą wiele prymitywnych typów ogrodzeń za pomocą operatorów logicznych. W tym przykładzie tworzymy kombinację bariery, która aktywuje się, gdy użytkownik chodzi, a 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, ORNOT są prawidłowe, więc można stosować dowolne kombinacje logiczne. Ten przykład pokazuje ogrodzenie, które jest aktywowane, gdy użytkownik oddali się od bieżącej lokalizacji o ponad 100 metrów lub gdy od bieżącej chwili upłynęło ponad 1 godzinę.

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.