Pagar menentukan satu atau beberapa kondisi konteks yang dapat bereaksi pada aplikasi Anda. Saat status fence berubah, aplikasi Anda akan menerima callback.
Ada dua jenis fence: fence primitif, yang mewakili kumpulan dasar sinyal
konteks, dan fence kombinasi, yang menggabungkan beberapa fence primitif dengan
penggunaan operator boolean. Semua fence adalah instance AwarenessFence
.
Membuat fence primitif
Pagar primitif, yang mewakili kumpulan dasar sinyal konteks, ditentukan
dalam paket awareness.fence
. Contoh berikut menunjukkan pembuatan fence sederhana yang TRUE
jika 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 fence berada dalam status TRUE
setiap kali pengguna adalah WALKING
.
Merespons transisi
Setiap jenis fence primitif, dengan pengecualian TimeFence
, juga dapat dipicu
sesaat ketika status konteks bertransisi. Misalnya, Anda dapat
menyetel DetectedActivityFence
untuk memicu sesaat saat pengguna
starting
atau
stopping
aktivitas. Pagar transisi berada dalam status TRUE
selama beberapa detik sebelum
berubah FALSE
lagi.
Membuat pagar kombinasi
Pagar kombinasi menggabungkan beberapa jenis fence primitif dengan penggunaan operator boolean. Contoh berikut menunjukkan pembuatan pagar kombinasi yang aktif 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 dapat dilakukan. Contoh berikut menampilkan fence yang dipicu saat pengguna bergerak lebih dari 100 meter dari lokasi saat ini, atau lebih dari satu jam yang 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 pagar.