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 starting
lub stopping
wykonuje 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
, OR
i NOT
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.