बीकन मैसेज पाएं

आपका ऐप्लिकेशन उसी तरीके से ब्लूटूथ कम एनर्जी (BLE) बीकन अटैचमेंट की सदस्यता ले सकता है जिसका इस्तेमाल आस-पास के दूसरे डिवाइसों में पब्लिश किए गए मैसेज की सदस्यता लेने के लिए किया जाता है. सदस्यता लेने पर, आपके ऐप्लिकेशन को बीकन और आस-पास के डिवाइस, दोनों से अपने-आप मैसेज मिलने लगेंगे.

BLE बीकन मैसेज की सदस्यता लें

आपका ऐप्लिकेशन दो तरीकों से BLE बीकन मैसेज की सदस्यता ले सकता है:

फ़ोरग्राउंड में सदस्यता लें

जब आपका ऐप्लिकेशन फ़ोरग्राउंड मैसेज में बीकन मैसेज की सदस्यता लेता है, तो वे तब तक लगातार जांच करते हैं, जब तक आपका ऐप्लिकेशन सदस्यता छोड़ नहीं देता. उपयोगकर्ता की कार्रवाई के जवाब में, फ़ोरग्राउंड में सदस्यता सिर्फ़ तब चालू करें, जब आपका ऐप्लिकेशन चालू हो.

आपका ऐप्लिकेशन Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) को कॉल करके और Strategy विकल्प को BLE_ONLY पर सेट करके फ़ोरग्राउंड की सदस्यता शुरू कर सकता है.

यहां दिए गए कोड स्निपेट में फ़ोरग्राउंड की सदस्यता शुरू करने का तरीका बताया गया है Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mMessageListener = new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.d(TAG, "Found message: " + new String(message.getContent()));
        }

        @Override
        public void onLost(Message message) {
            Log.d(TAG, "Lost sight of message: " + new String(message.getContent()));
        }
    }
}

// Subscribe to receive messages.
private void subscribe() {
    Log.i(TAG, "Subscribing.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}

अगर सदस्यता लेना ज़रूरी नहीं है, तो आपको ऐप्लिकेशन को Nearby.getMessagesClient(Activity).unsubscribe(MessageListener) पर कॉल करके सदस्यता छोड़नी होगी.

बैकग्राउंड में सदस्यता लें

जब आपका ऐप्लिकेशन बैकग्राउंड में बीकन मैसेज की सदस्यता लेता है, तो कम पावर वाले स्कैन, स्क्रीन-ऑन इवेंट में ट्रिगर होते हैं. ऐसा तब भी होता है, जब आपका ऐप्लिकेशन चालू न हो. आप किसी खास मैसेज के जवाब में अपने ऐप्लिकेशन को "रीफ़्रेश" करने के लिए इन स्कैन सूचनाओं का इस्तेमाल कर सकते हैं. बैकग्राउंड में ली जाने वाली सदस्यताओं के लिए, फ़ोरग्राउंड की सदस्यताओं से कम बिजली का इस्तेमाल होता है. हालांकि, इनमें इंतज़ार का समय और कम भरोसा होता है.

आपका ऐप्लिकेशन Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) को कॉल करके और Strategy विकल्प को BLE_ONLY पर सेट करके बैकग्राउंड सदस्यता शुरू कर सकता है.

नीचे दिया गया कोड स्निपेट, Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) पर कॉल करके बैकग्राउंड में सदस्यता लेने के बारे में बताता है.

// Subscribe to messages in the background.
private void backgroundSubscribe() {
    Log.i(TAG, "Subscribing for background updates.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(getPendingIntent(), options);
}

private PendingIntent getPendingIntent() {
    return PendingIntent.getBroadcast(this, 0, new Intent(this, BeaconMessageReceiver.class),
            PendingIntent.FLAG_UPDATE_CURRENT);
}

नीचे दिया गया कोड स्निपेट, BeaconMessageReceiver क्लास में इंटेंट मैनेज करने के बारे में बताता है.

@Override
public void onReceive(Context context, Intent intent) {
    Nearby.getMessagesClient(context).handleIntent(intent, new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.i(TAG, "Found message via PendingIntent: " + message);
        }

        @Override
        public void onLost(Message message) {
            Log.i(TAG, "Lost message via PendingIntent: " + message);
        }
    });
}

अगर सदस्यता लेना ज़रूरी नहीं है, तो आपको ऐप्लिकेशन को Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent) पर कॉल करके सदस्यता छोड़नी होगी.

बीकन मैसेज पार्स करें

बीकन अटैचमेंट अनचाही डेटा के ब्लॉब होते हैं, जिन्हें आप बीकन में जोड़ सकते हैं. हर अटैचमेंट में ये चीज़ें शामिल होती हैं:

  • नेमस्पेस: नेमस्पेस नेमस्पेस.
  • टाइप: डेटा टाइप.
  • डेटा: अटैचमेंट के लिए डेटा मान.

यह कोड स्निपेट, बीएलई बीकन से मिले मैसेज को पार्स करने के लिए, मैसेज सुनने वाले का इस्तेमाल करने के बारे में बताता है:

mMessageListener = new MessageListener() {
    @Override
    public void onFound(Message message) {
        // Do something with the message here.
        Log.i(TAG, "Message found: " + message);
        Log.i(TAG, "Message string: " + new String(message.getContent()));
        Log.i(TAG, "Message namespaced type: " + message.getNamespace() +
                "/" + message.getType());
    }

    ...
};

कॉन्टेंट को पार्स करना बाइट के फ़ॉर्मैट पर निर्भर करता है. इस उदाहरण में यह माना गया है कि कॉन्टेंट बाइट UTF-8 स्ट्रिंग को कोड में बदलते हैं. हालांकि, आपके बीकन मैसेज में दूसरे बाइट फ़ॉर्मैट को कोड में बदला जा सकता है (उदाहरण के लिए, सीरियल प्रोटोकॉल बफ़र). ज़्यादा जानकारी के लिए, बीकन में अटैचमेंट जोड़ें देखें.

यह जानने के लिए कि आपके प्रोजेक्ट से कौनसे नेमस्पेस जुड़े हैं, namespaces.list पर कॉल करें.

ध्यान दें:

  • बैटरी लाइफ़ बचाने के लिए, अपनी गतिविधि के onStop() फ़ंक्शन में जाकर Nearby.getMessagesClient(Activity).unsubscribe() पर कॉल करें. ध्यान दें कि यह सिर्फ़ तब लागू होता है, जब फ़ोरग्राउंड पर जाकर सदस्यता ली जा रही हो.
  • इंतज़ार का समय कम करने के लिए, Nearby.getMessagesClient(Activity).subscribe() पर कॉल करते समय Strategy.BLE_ONLY विकल्प का इस्तेमाल करें. इस विकल्प को सेट करने पर, Nearby Messages API क्लासिक ब्लूटूथ स्कैन को ट्रिगर नहीं करेगा. इससे बीकन का पता लगाने के लिए इंतज़ार का समय बढ़ जाता है, क्योंकि सिस्टम सभी संभावित स्कैन प्रकारों को पार नहीं करता.
  • बीकन में मैसेज पेलोड अटैच करने के लिए, Proximity Beacon API का इस्तेमाल करें.