إنشاء سياج

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

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

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