Szermierka określa jeden lub więcej warunków kontekstowych, na które może reagować aplikacja. Po zmianie stanu płotu Twoja aplikacja otrzymuje wywołanie zwrotne.
Istnieją 2 rodzaje ogrodzeń: ogrodzenie podstawowe, reprezentujące podstawowy zestaw sygnałów kontekstowych, oraz ogrodzenia łączone, które łączą kilka głównych ogrodzeń za pomocą operatorów logicznych. Wszystkie ogrodzenia to wystąpienia elementu AwarenessFence
.
Tworzenie podstawowego ogrodzenia
Ogrodzenia podstawowe, które reprezentują podstawowy zestaw sygnałów kontekstowych, są zdefiniowane w pakiecie awareness.fence
. Poniższy przykład pokazuje utworzenie prostego ogrodzenia: TRUE
, gdy użytkownik wykryje aktywność: WALKING
. W innym przypadku FALSE
:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
W poprzednim przykładzie obiekt DetectedActivityFence
został utworzony przez wywołanie do during
, co oznacza, że ogrodzenia są w stanie TRUE
zawsze, gdy użytkownik ma WALKING
.
Reaguj na przejścia
Każdy typ ogrodzenia podstawowego, z wyjątkiem TimeFence
, może się też uruchomić w momencie zmiany stanu kontekstu. Możesz np. skonfigurować DetectedActivityFence
w taki sposób, aby wywoływał się w chwili, gdy użytkownik wywoła działanie: starting
lub stopping
. Ogrodzenia przejściowe znajdują się w stanie TRUE
przez kilka sekund, a potem ponownie są FALSE
.
Tworzenie ogrodzenia łączącego
Ogrodzenia mieszane łączą różne typy ogrodzeń za pomocą operatorów logicznych. Poniższy przykład pokazuje połączenie ogrodzeń, które się aktywują podczas spaceru i podłączenia słuchawek:
// 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 każda logiczna kombinacja ogrodzeń. Poniższy przykład pokazuje szermierkę, która jest wyświetlana, gdy użytkownik znajdzie się w odległości 100 metrów od bieżącej lokalizacji lub ponad godzinę od bieżącego czasu.
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 płot