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:
- Di latar depan, sebagai respons atas tindakan pengguna atau acara.
- Di latar belakang, saat aplikasi Anda tidak berjalan.
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:
-
Untuk menghemat masa pakai baterai, panggil
Nearby.getMessagesClient(Activity).unsubscribe()
dalam fungsionStop()
Aktivitas Anda. Perhatikan bahwa ini hanya berlaku jika 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 Bluetooth klasik pemindaian. Hal ini meningkatkan latensi untuk deteksi beacon karena sistem tidak merotasi semua jenis pemindaian yang mungkin. - Untuk melampirkan payload pesan ke beacon, gunakan metode Proximity Beacon API.