Çit oluşturma

Çit, uygulamanızın tepki verebileceği bir veya daha fazla bağlam koşulunu tanımlar. Bir çitin durumu değiştiğinde uygulamanıza geri arama yapılır.

İki tür çit vardır: Temel bağlam sinyali grubunu temsil eden ilkel çitler ve Boole operatörleri kullanılarak birden fazla ilkel çitin birleştirildiği kombinasyon çitleri. Tüm çitler AwarenessFence örneğidir.

Basit bir çit oluşturma

Temel bağlam sinyali grubunu temsil eden ilkel çitler, awareness.fence paketinde tanımlanır. Aşağıdaki örnekte, kullanıcının algılanan etkinliği WALKING olduğunda TRUE, aksi takdirde FALSE değerini alan basit bir çitin oluşturulması gösterilmektedir:

AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);

Önceki örnekte, DetectedActivityFence, during çağrısı ile oluşturulmuştur. Bu, kullanıcı WALKING olduğunda çitin TRUE durumunda olduğu anlamına gelir.

Geçişlere tepki verme

TimeFence hariç her ilkel çit türü, bağlam durumu geçişlerinde anlık olarak da tetiklenebilir. Örneğin, bir kullanıcı starting veya stopping bir etkinliğe katılırken DetectedActivityFence'ü anlık olarak tetikleyecek şekilde ayarlayabilirsiniz. Geçiş çitleri, tekrar FALSE durumuna dönmeden önce birkaç saniye boyunca TRUE durumunda kalır.

Kombinasyon çiti oluşturma

Kombinasyon çitleri, mantıksal operatörler kullanılarak birden fazla ilkel çit türünü birleştirir. Aşağıdaki örnekte, kullanıcı yürürken ve kulaklıklar takılıyken etkinleşen bir kombinasyon çitinin oluşturulması gösterilmektedir:

// 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
);

AND, OR ve NOT'den oluşan iç içe yerleştirilmiş ağaçlar geçerlidir. Bu nedenle, çitlerin herhangi bir mantıksal kombinasyonu mümkündür. Aşağıdaki örnekte, kullanıcı mevcut konumdan 100 metreden fazla hareket ettiğinde veya mevcut zamandan bir saatten fazla zaman geçtiğinde tetiklenen bir çit gösterilmektedir.

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));

Sonraki adım: Çit kaydetme.