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

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

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

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

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

  • उपयोगकर्ता हेडफ़ोन लगाकर प्लग में चला जाता है.
  • उपयोगकर्ता, वीकडे में शाम 5 बजे से पहले 100 मीटर की जियोफ़ेंस डालता है.
  • उपयोगकर्ता किसी खास BLE बीकन की रेंज डालता है.

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

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);
        }
    }
}