Tworzenie ogrodzenia

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.