يحدّد السياج شرطًا واحدًا أو أكثر من شروط السياق التي يمكن لتطبيقك التفاعل معها. عندما تتغيّر حالة السياج الجغرافي، يتلقّى تطبيقك ردّ اتصال.
هناك نوعان من الحدود الجغرافية: الحدود الجغرافية الأساسية التي تمثّل المجموعة الأساسية من إشارات السياق، والحدود الجغرافية المركّبة التي تجمع بين حدود جغرافية أساسية متعددة باستخدام عوامل منطقية. جميع السياجات هي مثيلات من AwarenessFence
.
إنشاء سياج جغرافي أساسي
يتم تحديد الحدود الجغرافية الأساسية، التي تمثّل المجموعة الأساسية من إشارات السياق، في حزمة awareness.fence
. يوضّح المثال التالي كيفية إنشاء سياج بسيط يكون TRUE
عندما يكون النشاط الذي تم رصده للمستخدم هو WALKING
،
ويكون FALSE
في الحالات الأخرى:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
في المثال السابق، تم إنشاء DetectedActivityFence
من خلال طلب إلى during
،
ما يعني أنّ السياج الجغرافي يكون في الحالة TRUE
عندما يكون المستخدم WALKING
.
التفاعل مع الانتقالات
يمكن أيضًا تشغيل كل نوع من أنواع السياجات الأساسية، باستثناء TimeFence
، بشكل مؤقت عند انتقال حالة السياق. على سبيل المثال، يمكنك ضبط DetectedActivityFence
ليتم تشغيله مؤقتًا عندما starting
أو stopping
نشاط. تكون حواجز الانتقال في الحالة TRUE
لبضع ثوانٍ قبل أن تعود إلى الحالة 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 متر عن الموقع الجغرافي الحالي، أو عندما يمر أكثر من ساعة على الوقت الحالي.
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));
الخطوة التالية: تسجيل سياج جغرافي