Fence จะกำหนดเงื่อนไขบริบทอย่างน้อย 1 รายการที่แอปของคุณสามารถตอบสนองได้ เมื่อสถานะของ Fence เปลี่ยนแปลง แอปของคุณจะได้รับ Callback
รั้วมี 2 ประเภท ได้แก่ รั้วพื้นฐาน ซึ่งแสดงชุดสัญญาณบริบทพื้นฐาน และรั้วแบบผสม ซึ่งรวมรั้วพื้นฐานหลายรายการเข้ากับการใช้โอเปอเรเตอร์บูลีน รั้วทั้งหมดเป็นอินสแตนซ์ของ AwarenessFence
สร้างรั้วแบบดั้งเดิม
รั้วพื้นฐานซึ่งแสดงชุดสัญญาณบริบทพื้นฐานจะกำหนดไว้ในแพ็กเกจ awareness.fence ตัวอย่างต่อไปนี้แสดงการสร้าง 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));
ขั้นตอนถัดไป: ลงทะเบียน Fence