Penanda menentukan satu atau beberapa kondisi konteks yang dapat direspons oleh aplikasi Anda. Saat status pagar berubah, aplikasi Anda akan menerima callback.
Ada dua jenis pagar: pagar primitif, yang merepresentasikan set dasar sinyal konteks, dan pagar kombinasi, yang menggabungkan beberapa pagar primitif dengan penggunaan operator boolean. Semua pagar adalah instance AwarenessFence
.
Membuat batas primitif
Pembatas primitif, yang merepresentasikan 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);
Dalam contoh sebelumnya, DetectedActivityFence
dibuat oleh panggilan ke during
,
yang berarti pagar berada dalam status TRUE
setiap kali pengguna berada di WALKING
.
Bereaksi terhadap transisi
Setiap jenis pagar primitif, kecuali TimeFence
, juga dapat dipicu sesaat saat transisi status konteks. Misalnya, Anda dapat
menyetel DetectedActivityFence
untuk dipicu sesaat saat pengguna
starting
atau
stopping
suatu aktivitas. Batas 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 dilakukan. Contoh berikut menunjukkan batas 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: Daftarkan batas.