Membuat pagar

Fence menentukan satu atau beberapa kondisi konteks yang dapat direaksi oleh aplikasi Anda. Saat status fence berubah, aplikasi Anda akan menerima callback.

Ada dua jenis fence: fence primitif, yang mewakili kumpulan sinyal konteks dasar, dan fence kombinasi, yang menggabungkan beberapa fence primitif dengan penggunaan operator boolean. Semua fence adalah instance AwarenessFence.

Membuat fence primitif

Fence primitif, yang mewakili kumpulan sinyal konteks dasar, ditentukan dalam paket awareness.fence. Contoh berikut menunjukkan pembuatan fence sederhana yang TRUE TRUE saat aktivitas terdeteksi pengguna adalah WALKING, dan FALSE jika tidak:

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

Pada contoh sebelumnya, DetectedActivityFence dibuat dengan panggilan ke during, yang berarti fence berada dalam status TRUE setiap kali pengguna WALKING.

Bereaksi terhadap transisi

Setiap jenis fence primitif, kecuali TimeFence, juga dapat dipicu sesaat saat status konteks bertransisi. Misalnya, Anda dapat menetapkan DetectedActivityFence untuk dipicu sesaat saat pengguna starting atau stopping aktivitas. Fence transisi berada dalam status TRUE selama beberapa detik sebelum kembali menjadi FALSE.

Membuat fence kombinasi

Fence kombinasi menggabungkan beberapa jenis fence primitif dengan penggunaan operator boolean. Contoh berikut menunjukkan pembuatan fence kombinasi yang diaktifkan saat pengguna berjalan dan headphone terpasang:

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

Pohon bertingkat AND, OR, dan NOT valid, sehingga kombinasi boolean fence apa pun dapat dilakukan. Contoh berikut menunjukkan fence yang dipicu saat pengguna bergerak lebih dari 100 meter dari lokasi saat ini, atau lebih dari satu jam telah berlalu sejak waktu saat ini.

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

Langkah berikutnya: Mendaftarkan fence.