Ogrodzenie określa co najmniej 1 warunek kontekstowy, na który może reagować Twoja aplikacja. Gdy stan ogrodzenia się zmieni, aplikacja otrzyma wywołanie zwrotne.
Istnieją 2 rodzaje ogrodzeń: proste, które reprezentują podstawowy zestaw sygnałów kontekstowych, oraz złożone, które łączą wiele prostych ogrodzeń za pomocą operatorów logicznych. Wszystkie bariery są instancjami klasy AwarenessFence
.
Tworzenie prostej strefy
Podstawowe ogrodzenia, które reprezentują podstawowy zestaw sygnałów kontekstowych, są zdefiniowane w pakiecie awareness.fence
. Poniższy przykład pokazuje tworzenie prostego obszaru, który 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 warunek jest spełniony, gdy użytkownik jest WALKING
.TRUE
Reagowanie na przejścia
Każdy podstawowy typ ogrodzenia, z wyjątkiem TimeFence
, może być też chwilowo aktywowany, gdy zmienia się stan kontekstu. Możesz na przykład ustawić DetectedActivityFence
, aby na chwilę wywoływać zdarzenie, gdy użytkownik starting
lub stopping
aktywność. Granice przejścia są w stanie TRUE
przez kilka sekund, zanim ponownie zmienią się w FALSE
.
Tworzenie ogrodzenia kombinowanego
Ogrodzenia kombinowane łączą wiele typów ogrodzeń pierwotnych za pomocą operatorów logicznych. Poniższy przykład pokazuje tworzenie kombinacji stref, która 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 jest dowolne połączenie logiczne płotów. Poniższy przykład pokazuje strefę, która jest aktywowana, gdy użytkownik oddali się od bieżącej lokalizacji o ponad 100 metrów lub gdy od bieżącego czasu minie 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.