फ़ेंस बनाएं

फ़ेंस, एक या उससे ज़्यादा संदर्भ स्थितियों को तय करता है जिन पर आपका ऐप्लिकेशन प्रतिक्रिया दे सकता है. जब किसी फ़ेंस की स्थिति बदलती है, तो आपके ऐप्लिकेशन को कॉलबैक मिलता है.

फ़ेंस दो तरह के होते हैं: प्राइमटिव फ़ेंस, जो कॉन्टेक्स्ट सिग्नल के बुनियादी सेट को दिखाते हैं और कॉम्बिनेशन फ़ेंस, जो बूलियन ऑपरेटर का इस्तेमाल करके कई प्राइमटिव फ़ेंस को जोड़ते हैं. सभी फ़ेंस, AwarenessFence के इंस्टेंस होते हैं.

प्राइमिटिव फ़ेंस बनाना

कॉन्टेक्स्ट सिग्नल के बुनियादी सेट को दिखाने वाले प्राइमटिव फ़ेंस, awareness.fence पैकेज में तय किए जाते हैं. नीचे दिए गए उदाहरण में, एक आसान फ़ेंस बनाने का तरीका बताया गया है. जब उपयोगकर्ता की गतिविधि WALKING के तौर पर पहचानी जाती है, तो यह फ़ेंस TRUE और अन्य मामलों में FALSE होता है:

AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);

पिछले उदाहरण में, DetectedActivityFence को during को कॉल करके बनाया गया था. इसका मतलब है कि जब भी उपयोगकर्ता WALKING होता है, तो फ़ेंस TRUE स्थिति में होता है.

ट्रांज़िशन पर प्रतिक्रिया देना

कॉन्टेक्स्ट स्टेटस में बदलाव होने पर, TimeFence को छोड़कर हर प्रिमिटिव फ़ेंस टाइप को कुछ समय के लिए ट्रिगर किया जा सकता है. उदाहरण के लिए, किसी गतिविधि के दौरान उपयोगकर्ता starting या stopping होने पर, DetectedActivityFence को कुछ समय के लिए ट्रिगर करने के लिए सेट किया जा सकता है. ट्रांज़िशन फ़ेंस, कुछ सेकंड के लिए 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));

अगला चरण: फ़ेंस रजिस्टर करना.