फ़ेंस एपीआई के बारे में खास जानकारी

Awareness API में, फ़ेंस का कॉन्सेप्ट जियोफ़ेंसिंग से लिया गया है. इसमें किसी भौगोलिक इलाके या जियोफ़ेंस की जानकारी दी जाती है. साथ ही, जब कोई उपयोगकर्ता जियोफ़ेंस वाले इलाके में जाता है या उससे बाहर निकलता है, तो ऐप्लिकेशन को कॉलबैक मिलते हैं. Fence API, जगह की जानकारी के आधार पर पाबंदी लगाने की सुविधा को बेहतर बनाता है. इससे, जगह की जानकारी के साथ-साथ कई अन्य संदर्भों की शर्तें भी शामिल की जा सकती हैं. जब भी कॉन्टेक्स्ट की स्थिति में बदलाव होता है, तो ऐप्लिकेशन को कॉलबैक मिलते हैं. उदाहरण के लिए, अगर आपका ऐप्लिकेशन हेडफ़ोन के लिए फ़ेंस तय करता है, तो हेडफ़ोन के प्लग इन होने और प्लग आउट होने पर, उसे कॉलबैक मिलते हैं.

फ़ेंस एपीआई का इस्तेमाल करके, कॉन्टेक्स्ट सिग्नल के आधार पर फ़ेंस तय किए जा सकते हैं. जैसे:

  • उपयोगकर्ता की मौजूदा जगह की जानकारी (अक्षांश/देशांतर)
  • उपयोगकर्ता की मौजूदा गतिविधि, जैसे कि पैदल चलना या गाड़ी चलाना.
  • डिवाइस के हिसाब से शर्तें, जैसे कि हेडफ़ोन कनेक्ट हैं या नहीं.
  • आस-पास मौजूद बीकन से दूरी

फ़ेंस एपीआई की मदद से, AND, OR, और NOT बूलियन ऑपरेटर के साथ फ़ेंस बनाने के लिए, कई कॉन्टेक्स्ट सिग्नल को जोड़ा जा सकता है. इसके बाद, जब भी फ़ेंस की शर्तें पूरी होती हैं, तो आपके ऐप्लिकेशन को कॉलबैक मिलते हैं. संभावित फ़ेंस के कुछ उदाहरणों में ये शामिल हैं:

  • उपयोगकर्ता हेडफ़ोन प्लग-इन करता है और चलना शुरू करता है.
  • उपयोगकर्ता, किसी कामकाजी दिन शाम 5 बजे से पहले 100 मीटर के जियोफ़ेंस में प्रवेश करता है.
  • उपयोगकर्ता किसी खास बीएलई बीकन की रेंज में आता है.

यहां दिए गए उदाहरण में, फ़ेंस तय करने का तरीका बताया गया है, जो उपयोगकर्ता के चलते ही चालू हो जाता है:

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

फ़ेंस तय करने के बाद, आपको ये काम करने होंगे:

  • कॉलबैक पाने के लिए फ़ेंस को रजिस्टर करने के लिए, updateFences पर कॉल करें.
  • कोई ऐसा कॉलबैक तय करें जिसे फ़ेंस की स्थिति बदलने पर ट्रिगर किया जा सके.

नीचे दिए गए उदाहरण में, फ़ेंस बनाने और उसे रजिस्टर करने का तरीका बताया गया है. इस उदाहरण में, फ़ेंस ट्रिगर होने पर इंटेंट को मैनेज करने के लिए, BroadcastReceiver के कस्टम सबक्लास का इस्तेमाल किया जाता है.

Awareness.getFenceClient(this).updateFences(new FenceUpdateRequest.Builder()
    .addFence(FENCE_KEY, exercisingWithHeadphonesFence, mPendingIntent)
    .build())
    .addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Log.i(TAG, "Fence was successfully registered.");
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.e(TAG, "Fence could not be registered: " + e);
        }
    });
public class FenceReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        FenceState fenceState = FenceState.extract(intent);

        if (TextUtils.equals(fenceState.getFenceKey(), FENCE_KEY)) {
            String fenceStateStr;
            switch (fenceState.getCurrentState()) {
                case FenceState.TRUE:
                    fenceStateStr = "true";
                    break;
                case FenceState.FALSE:
                    fenceStateStr = "false";
                    break;
                case FenceState.UNKNOWN:
                    fenceStateStr = "unknown";
                    break;
                default:
                    fenceStateStr = "unknown value";
            }
            mLogFragment.getLogView().println("Fence state: " + fenceStateStr);
        }
    }
}