Dapatkan Pesan Beacon

Aplikasi Anda dapat berlangganan lampiran beacon Bluetooth Hemat Energi (BLE) menggunakan mekanisme yang sama yang digunakan untuk berlangganan pesan yang diterbitkan oleh perangkat lain di sekitar. Saat berlangganan, aplikasi Anda akan otomatis menerima pesan dari beacon dan perangkat di sekitar.

Berlangganan pesan beacon BLE

Ada dua cara agar aplikasi Anda dapat berlangganan pesan beacon BLE:

Berlangganan di latar depan

Saat aplikasi Anda berlangganan pesan beacon di latar depan, pemindaian akan terus dilakukan sampai aplikasi Anda berhenti berlangganan. Mulai latar depan saja ketika aplikasi Anda aktif, biasanya sebagai respons atas tindakan pengguna.

Aplikasi Anda dapat memulai langganan latar depan dengan memanggil Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) dan menetapkan opsi Strategy ke BLE_ONLY.

Cuplikan kode berikut menunjukkan cara memulai langganan latar depan 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);
}

Jika langganan tidak lagi diperlukan, aplikasi Anda harus berhenti berlangganan dengan memanggil Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)

Subscribe di latar belakang

Saat aplikasi Anda berlangganan pesan beacon di latar belakang, pemindaian rendah daya dipicu saat peristiwa layar aktif, bahkan saat aplikasi Anda tidak aktif. Anda dapat menggunakan notifikasi pemindaian ini untuk "bangunkan" aplikasi Anda sebagai respons terhadap pesan tertentu. Langganan latar belakang menggunakan lebih sedikit daya daripada langganan latar depan, tetapi memiliki latensi lebih tinggi dan keandalan yang lebih rendah.

Aplikasi Anda dapat memulai langganan latar belakang dengan memanggil Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) dan menetapkan opsi Strategy ke BLE_ONLY.

Cuplikan kode berikut menunjukkan cara memulai langganan latar belakang dengan menelepon 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);
}

Cuplikan kode berikut menunjukkan penanganan intent tersebut dalam Class 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);
        }
    });
}

Jika langganan tidak lagi diperlukan, aplikasi Anda harus berhenti berlangganan dengan memanggil Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)

Mengurai pesan beacon

Lampiran lampiran beacon adalah blob data arbitrer yang dapat ditambahkan ke beacon. Setiap lampiran terdiri dari bagian berikut:

  • Namespace: ID namespace.
  • Jenis: Jenis data.
  • Data: Nilai data untuk lampiran.

Cuplikan kode berikut menunjukkan penggunaan pemroses pesan untuk mengurai pesan yang diterima dari beacon 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());
    }

    ...
};

Penguraian konten bergantung pada format byte. Contoh ini mengasumsikan bahwa byte konten mengenkode string UTF-8, tetapi pesan beacon Anda dapat mengenkode format byte lain (misalnya buffering protokol serial). Untuk informasi selengkapnya, lihat Menambahkan Lampiran ke Beacon.

Untuk mengetahui namespace mana yang terkait dengan project Anda, panggil namespaces.list.

Catatan: