إنشاء السياج

يحدّد السياج شرطًا واحدًا أو أكثر من سياقات يمكن للتطبيق التفاعل معها. عندما تتغيّر حالة السياج، يتلقّى تطبيقك معاودة اتصال.

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

الخطوة التالية: تسجيل سياج