สร้างรั้ว

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

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