สร้างรั้ว

รั้วกําหนดเงื่อนไขบริบทที่แอปสามารถตอบสนอง เมื่อมีการเปลี่ยนแปลงรั้ว แอปจะได้รับโค้ดเรียกกลับ

รั้วมี 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));

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