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

आपका ऐप्लिकेशन, ब्लूटूथ स्मार्ट (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).

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

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

  • नाम स्थान: एक नाम स्थान पहचानकर्ता.
  • टाइप: डेटा टाइप.
  • डेटा: अटैचमेंट के लिए डेटा वैल्यू.

नीचे दिया गया कोड स्निपेट, पार्स करने के लिए मैसेज लिसनर का इस्तेमाल करने के बारे में बताता है किसी BLE बीकन से प्राप्त हुए संदेश:

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.

ध्यान दें:

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