फ़ेंस, कॉन्टेक्स्ट की एक या उससे ज़्यादा शर्तें तय करता है. इनके हिसाब से आपका ऐप्लिकेशन काम कर सकता है. जब फ़ेंस की स्थिति बदलती है, तो आपके ऐप्लिकेशन को कॉलबैक मिलता है.
फ़ेंस दो तरह के होते हैं: प्रिमिटिव फ़ेंस, जो कॉन्टेक्स्ट सिग्नल के बुनियादी सेट को दिखाते हैं. साथ ही, कॉम्बिनेशन फ़ेंस, जो बूलियन ऑपरेटर का इस्तेमाल करके कई प्रिमिटिव फ़ेंस को जोड़ते हैं. सभी फ़ेंस, AwarenessFence के इंस्टेंस होते हैं.
एक साधारण बाड़ बनाएं
प्रिमिटिव फ़ेंस, कॉन्टेक्स्ट सिग्नल के बुनियादी सेट को दिखाते हैं. इन्हें awareness.fence पैकेज में तय किया जाता है. यहां दिए गए उदाहरण में, एक सामान्य फ़ेंस बनाने का तरीका बताया गया है. इसमें, उपयोगकर्ता की गतिविधि WALKING होने पर, फ़ेंस TRUE होता है. इसके अलावा, अन्य मामलों में फ़ेंस FALSE होता है:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
पिछले उदाहरण में, DetectedActivityFence को during को कॉल करके बनाया गया था. इसका मतलब है कि जब भी उपयोगकर्ता WALKING होता है, तब फ़ेंस TRUE स्थिति में होता है.
ट्रांज़िशन पर प्रतिक्रिया देना
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));
अगला चरण: फ़ेंस रजिस्टर करना.