Ogrodzenie określa co najmniej 1 warunek kontekstowy, na który może reagować Twoja aplikacja. Gdy stan ogrodzenia ulegnie zmianie, aplikacja otrzyma wywołanie zwrotne.
Istnieją 2 rodzaje granic: proste, które reprezentują podstawowy zestaw sygnałów kontekstowych, oraz złożone, które łączą wiele prostych granic za pomocą operatorów logicznych. Wszystkie obszary to instancje klasy AwarenessFence.
Tworzenie podstawowego ogrodzenia
Ogrodzenia pierwotne, które reprezentują podstawowy zestaw sygnałów kontekstowych, są zdefiniowane w pakiecie awareness.fence. W tym przykładzie pokazujemy, jak utworzyć prostą strefę, która jest TRUE
wtedy, gdy wykryta aktywność użytkownika to WALKING,
a FALSE w innych przypadkach:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
W poprzednim przykładzie element DetectedActivityFence
został utworzony przez wywołanie funkcji during,
co oznacza, że warunek jest TRUE spełniony, gdy użytkownik jest WALKING.
Reagowanie na przejścia
Każdy podstawowy typ ogrodzenia, z wyjątkiem TimeFence, może być też wywoływany chwilowo, 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ść. Ogrodzenia przejścia są w stanie TRUE przez kilka sekund, zanim ponownie zmienią się w FALSE.
Tworzenie kombinacji ogrodzeń
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żliwa jest dowolna kombinacja logiczna 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 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 obszar.