รั้วกำหนดเงื่อนไขบริบทอย่างน้อย 1 รายการที่แอปของคุณตอบสนองได้ เมื่อสถานะของรั้วเปลี่ยนแปลง แอปจะได้รับการเรียกกลับ
รั้วมี 2 ประเภท ได้แก่ รั้วดั้งเดิม ซึ่งแสดงถึงชุดสัญญาณบริบทพื้นฐาน
และรั้วผสม ซึ่งรวมรั้วดั้งเดิมหลายรั้วเข้าด้วยกันโดยใช้
ตัวดำเนินการบูลีน รั้วทั้งหมดเป็นอินสแตนซ์ของ AwarenessFence
สร้างรั้วพื้นฐาน
รั้วพื้นฐานซึ่งแสดงถึงชุดสัญญาณบริบทพื้นฐานจะกำหนดไว้ในแพ็กเกจ awareness.fence
ตัวอย่างต่อไปนี้แสดงการสร้างรั้วแบบง่ายซึ่งจะTRUE
เมื่อกิจกรรมที่ตรวจพบของผู้ใช้คือ WALKING
และFALSE
ในกรณีอื่นๆ
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
ในตัวอย่างก่อนหน้านี้ DetectedActivityFence
สร้างขึ้นโดยการเรียกใช้ during
ซึ่งหมายความว่ารั้วจะอยู่ในสถานะ TRUE
เมื่อใดก็ตามที่ผู้ใช้อยู่ในสถานะ WALKING
รีแอ็กต่อทรานซิชัน
รั้วประเภทดั้งเดิมแต่ละประเภท ยกเว้น TimeFence
ยังสามารถ
ทริกเกอร์ชั่วขณะเมื่อสถานะบริบทเปลี่ยน เช่น คุณสามารถ
ตั้งค่าDetectedActivityFence
ให้ทริกเกอร์ชั่วคราวเมื่อผู้ใช้starting
หรือ
stopping
กิจกรรม รั้วเปลี่ยนสถานะจะอยู่ในสถานะ TRUE
เป็นเวลา 2-3 วินาทีก่อนที่จะเปลี่ยนเป็น FALSE
อีกครั้ง
สร้างรั้วผสม
รั้วผสมจะรวมรั้วพื้นฐานหลายประเภทเข้าด้วยกันโดยใช้ตัวดำเนินการบูลีน ตัวอย่างต่อไปนี้แสดงการสร้างรั้วผสมที่จะ เปิดใช้งานเมื่อผู้ใช้เดินและเสียบหูฟัง
// 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
และ NOT
ใช้ได้ ดังนั้นจึงสามารถใช้รั้วร่วมกันได้ทุกแบบที่เป็นบูลีน
ตัวอย่างต่อไปนี้แสดงรั้วที่
ทริกเกอร์เมื่อผู้ใช้เคลื่อนที่มากกว่า 100 เมตรจากตำแหน่งปัจจุบัน
หรือเวลาผ่านไปมากกว่า 1 ชั่วโมงนับตั้งแต่เวลาปัจจุบัน
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));
ขั้นตอนถัดไป: ลงทะเบียนรั้ว