يحدّد السياج شرطًا واحدًا أو أكثر من سياقات يمكن للتطبيق التفاعل معها. عندما تتغيّر حالة السياج، يتلقّى تطبيقك معاودة اتصال.
هناك نوعان من الأسوار الأسبقية، وهما الأسوار الأساسية للسياج،
اللذين يمثّلان المجموعة الأساسية من السياج، والأسوار المجمّعة التي تجمع بين أسوار عديدة وفقًا
لعوامل التشغيل المنطقية. جميع السياج هي مثيلات من 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));
الخطوة التالية: تسجيل سياج