สร้างรั้ว

รั้วกั้นจะกําหนดเงื่อนไขบริบทอย่างน้อย 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));

ขั้นตอนถัดไป: ลงทะเบียนรั้ว