Fence menentukan satu atau beberapa kondisi konteks yang dapat direspons oleh aplikasi Anda. Saat status pembatas berubah, aplikasi Anda akan menerima callback.
Ada dua jenis pembatas: pembatas primitif, yang mewakili kumpulan dasar sinyal
konteks, dan pembatas kombinasi, yang menggabungkan beberapa pembatas primitif dengan
penggunaan operator boolean. Semua pembatas adalah instance AwarenessFence.
Membuat pagar primitif
Pagar primitif, yang mewakili kumpulan dasar sinyal konteks, ditentukan
dalam paket
awareness.fence. Contoh berikut menunjukkan pembuatan pagar sederhana yang TRUE
saat aktivitas pengguna yang terdeteksi adalah WALKING,
dan FALSE jika tidak:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Pada contoh sebelumnya, DetectedActivityFence
dibuat oleh panggilan ke during,
yang berarti pagar berada dalam status TRUE setiap kali pengguna WALKING.
Bereaksi terhadap transisi
Setiap jenis pagar primitif, kecuali TimeFence, juga dapat
dipicu sesaat saat status konteks bertransisi. Misalnya, Anda dapat
menyetel DetectedActivityFence untuk dipicu sesaat saat pengguna
starting
atau
stopping
aktivitas. Pagar transisi berada dalam status TRUE selama beberapa detik sebelum
berubah menjadi FALSE lagi.
Membuat pagar kombinasi
Pagar kombinasi menggabungkan beberapa jenis pagar primitif dengan penggunaan operator boolean. Contoh berikut menunjukkan pembuatan pagar kombinasi yang diaktifkan saat pengguna berjalan dan headphone dicolokkan:
// 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
);
Hierarki bertingkat AND, OR, dan NOT valid, sehingga kombinasi boolean pagar apa pun dapat digunakan. Contoh berikut menunjukkan pagar yang
dipicu saat pengguna berpindah 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 pembatas.