Tworzenie ogrodzenia

Ogrodzenie określa co najmniej 1 warunek dostępu zależny 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ń: podstawowe, które reprezentują podstawowy zestaw sygnałów kontekstowych, oraz złożone, które łączą kilka ogrodzeń podstawowych za pomocą operatorów logicznych. Wszystkie ogrodzenia są instancjami klasy AwarenessFence.

Tworzenie ogrodzenia podstawowego

Ogrodzenia podstawowe, 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 podstawowego, z wyjątkiem TimeFence, może być też wyzwalany na chwilę, gdy zmienia się stan kontekstu. Możesz na przykład ustawić DetectedActivityFence, aby było wyzwalane na chwilę, gdy użytkownik 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ą kilka typów ogrodzeń podstawowych 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.