Aplikasi Anda dapat berlangganan lampiran beacon Bluetooth Hemat Energi (BLE) menggunakan mekanisme yang sama dengan yang digunakan untuk berlangganan pesan yang dipublikasikan oleh perangkat lain di sekitar. Saat berlangganan, aplikasi 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:
-
Untuk menghemat masa pakai baterai, panggil
Nearby.getMessagesClient(Activity).unsubscribe()
dalam fungsionStop()
Aktivitas Anda. Perlu diperhatikan bahwa ini hanya berlaku saat berlangganan di latar depan. -
Untuk mengurangi latensi, gunakan opsi
Strategy.BLE_ONLY
saat memanggilNearby.getMessagesClient(Activity).subscribe()
. Jika opsi ini disetel, Nearby Messages API tidak akan memicu pemindaian Bluetooth klasik. Hal ini meningkatkan latensi untuk deteksi beacon karena sistem tidak merotasi semua jenis pemindaian yang mungkin. - Untuk menambahkan payload pesan ke beacon, gunakan Proximity Beacon API.