বীকন বার্তা পান

আপনার অ্যাপটি একই পদ্ধতি ব্যবহার করে ব্লুটুথ লো এনার্জি (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 স্ট্রিংকে এনকোড করে, কিন্তু আপনার বীকন বার্তা অন্যান্য বাইট ফর্ম্যাটগুলিকে এনকোড করতে পারে (উদাহরণস্বরূপ একটি সিরিয়ালাইজড প্রোটোকল বাফার)। আরও তথ্যের জন্য, বীকনে সংযুক্তি যোগ করুন দেখুন।

আপনার প্রকল্পের সাথে কোন নামস্থান যুক্ত তা জানতে, namespace.list এ কল করুন।

মন্তব্য:

  • ব্যাটারি লাইফ বাঁচাতে, আপনার অ্যাক্টিভিটির onStop() ফাংশনে Nearby.getMessagesClient(Activity).unsubscribe() কল করুন। মনে রাখবেন যে এটি শুধুমাত্র অগ্রভাগে সদস্যতা নেওয়ার সময় প্রযোজ্য।
  • লেটেন্সি কমাতে, Nearby.getMessagesClient(Activity).subscribe() কল করার সময় Strategy.BLE_ONLY বিকল্পটি ব্যবহার করুন। এই বিকল্পটি সেট করা হলে, Nearby Messages API ক্লাসিক ব্লুটুথ স্ক্যান ট্রিগার করবে না। এটি বীকন সনাক্তকরণের জন্য লেটেন্সি উন্নত করে যেহেতু সিস্টেমটি সম্ভাব্য সমস্ত স্ক্যান প্রকারের মাধ্যমে চক্রাকারে চলে না৷
  • একটি বীকনে একটি বার্তা পেলোড সংযুক্ত করতে, প্রক্সিমিটি বীকন API ব্যবহার করুন৷