إنشاء سياج

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

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

الخطوة التالية: تسجيل سياج جغرافي