Dapatkan Pesan Beacon

Aplikasi Anda dapat berlangganan lampiran beacon Bluetooth Hemat Energi (BLE) menggunakan mekanisme yang sama yang digunakan untuk berlangganan pesan yang dipublikasikan 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 bagi aplikasi Anda untuk berlangganan pesan beacon BLE:

  • Di latar depan, sebagai respons terhadap tindakan atau peristiwa pengguna.
  • Di latar belakang, saat aplikasi tidak berjalan.

Berlangganan di latar depan

Saat aplikasi Anda berlangganan pesan beacon di latar depan, pemindaian akan terus dilakukan hingga aplikasi Anda berhenti berlangganan. Hanya mulai langganan latar depan saat aplikasi Anda aktif, biasanya sebagai respons terhadap 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).

Berlangganan di latar belakang

Saat aplikasi Anda berlangganan pesan beacon di latar belakang, pemindaian daya rendah dipicu saat peristiwa layar aktif, meski saat aplikasi Anda tidak aktif. Anda dapat menggunakan notifikasi pemindaian ini untuk "mengaktifkan" aplikasi sebagai respons terhadap pesan tertentu. Langganan latar belakang menggunakan lebih sedikit daya daripada langganan latar depan, tetapi memiliki latensi yang 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 memanggil 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 di 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 Beacon adalah blob data arbitrer yang dapat Anda tambahkan ke beacon. Setiap lampiran terdiri dari bagian-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());
    }

    ...
};

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

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

Catatan: