Ogrodzenie określa co najmniej 1 warunek dostępu zależnego od kontekstu, na który Twoja aplikacja może reagować. Gdy stan ogrodzenia się zmieni, Twoja aplikacja otrzyma wywołanie zwrotne.
Istnieją 2 typy ogrodzeń: ogrodzenia pierwotne, które reprezentują podstawowy zestaw sygnałów kontekstowych, oraz ogrodzenia złożone, które łączą wiele ogrodzeń pierwotnych za pomocą operatorów logicznych. Wszystkie ogrodzenia są instancjami klasy AwarenessFence.
Tworzenie ogrodzenia pierwotnego
Ogrodzenia pierwotne, które reprezentują podstawowy zestaw sygnałów kontekstowych, są zdefiniowane
w pakiecie awareness.fence. Poniższy przykład pokazuje tworzenie prostego ogrodzenia, które ma wartość TRUE
gdy wykryta aktywność użytkownika to WALKING,
a FALSE w przeciwnym razie:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
W poprzednim przykładzie DetectedActivityFence
zostało utworzone przez wywołanie funkcji during, co oznacza, że ogrodzenie jest w stanie TRUE gdy użytkownik WALKING.
Reagowanie na przejścia
Każdy typ ogrodzenia pierwotnego, z wyjątkiem TimeFence, może być też chwilowo wyzwalany, gdy zmienia się stan kontekstu. Możesz na przykład
ustawić DetectedActivityFence, aby było chwilowo wyzwalane, gdy użytkownik jest
starting
lub
stopping
aktywność. Ogrodzenia przejścia są w stanie TRUE przez kilka sekund, zanim ponownie zmienią się na FALSE.
Tworzenie ogrodzenia złożonego
Ogrodzenia złożone łączą wiele typów ogrodzeń pierwotnych za pomocą operatorów logicznych. Poniższy przykład pokazuje tworzenie ogrodzenia złożonego, które aktywuje się, gdy użytkownik chodzi i ma podłączone słuchawki:
// 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
);
Dozwolone są zagnieżdżone drzewa AND, OR i NOT, więc możliwe jest dowolne połączenie logiczne ogrodzeń. Poniższy przykład pokazuje ogrodzenie, które jest wyzwalane, gdy użytkownik oddali się o ponad 100 metrów od bieżącej lokalizacji 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 ogrodzenie.