Dokumen ini menjelaskan cara menggunakan Bluetooth, Soket Bluetooth, dan Bluetooth Rendah Energy API untuk berkomunikasi dengan perangkat Bluetooth dan Bluetooth Hemat Energi.
Untuk informasi latar belakang tentang Bluetooth, lihat spesifikasi Bluetooth resmi.
Persyaratan manifes
Untuk Aplikasi Chrome yang menggunakan Bluetooth, tambahkan entri bluetooth ke manifes dan tentukan jika sesuai dengan UUID profil, protokol, atau layanan yang ingin Anda terapkan serta apakah Anda ingin menerapkannya dengan soket dan/atau API Energi Rendah.
Misalnya untuk implementasi socket:
"bluetooth": {
"uuids": [ "1105", "1106" ],
"socket": true
}
Dan untuk penerapan Hemat Energi:
"bluetooth": {
"uuids": [ "180D", "1809", "180F" ],
"low_energy": true
}
Untuk mengakses status adaptor saja, menemukan perangkat di sekitar, dan mendapatkan informasi dasar tentang perangkat, hanya entri itu sendiri yang diperlukan:
"bluetooth": {}
Informasi adaptor
Mendapatkan status adaptor
Untuk mendapatkan status adaptor Bluetooth, gunakan metode bluetooth.getAdapterState:
chrome.bluetooth.getAdapterState(function(adapter) {
console.log("Adapter " + adapter.address + ": " + adapter.name);
});
Notifikasi adaptor
Peristiwa bluetooth.onAdapterStateChanged dikirim setiap kali status adaptor berubah. Hal ini dapat digunakan, misalnya, untuk menentukan kapan radio adaptor dinyalakan atau dimatikan.
var powered = false;
chrome.bluetooth.getAdapterState(function(adapter) {
powered = adapter.powered;
});
chrome.bluetooth.onAdapterStateChanged.addListener(
function(adapter) {
if (adapter.powered != powered) {
powered = adapter.powered;
if (powered) {
console.log("Adapter radio is on");
} else {
console.log("Adapter radio is off");
}
}
});
Informasi perangkat
Mencantumkan perangkat umum
Untuk mendapatkan daftar perangkat yang dikenal oleh adaptor Bluetooth, gunakan bluetooth.getDevices berikut:
chrome.bluetooth.getDevices(function(devices) {
for (var i = 0; i < devices.length; i++) {
console.log(devices[i].address);
}
});
Semua perangkat akan ditampilkan, termasuk perangkat yang disambungkan dan perangkat yang baru ditemukan. Tidak akan memulai penemuan perangkat baru (lihat Menemukan perangkat di sekitar).
Menerima notifikasi perangkat
Daripada berulang kali memanggil bluetooth.getDevices, Anda dapat menggunakan bluetooth.onDeviceAdded, bluetooth.onDeviceChanged, dan bluetooth.onDeviceRemoved peristiwa untuk menerima notifikasi.
Peristiwa bluetooth.onDeviceAdded dikirim setiap kali perangkat ditemukan oleh adaptor atau membuat koneksi ke adaptor:
chrome.bluetooth.onDeviceAdded.addListener(function(device) {
console.log(device.address);
});
Menambahkan pemroses untuk peristiwa ini tidak memulai penemuan perangkat (lihat Menemukan di sekitar perangkat).
Perubahan pada perangkat, termasuk perangkat yang sebelumnya ditemukan dan disambungkan, diberi tahu oleh Peristiwa bluetooth.onDeviceChanged:
chrome.bluetooth.onDeviceChanged.addListener(function(device) {
console.log(device.address);
});
Terakhir, peristiwa bluetooth.onDeviceRemoved dikirim setiap kali perangkat yang disambungkan dihapus dari sistem, atau perangkat yang ditemukan baru-baru ini:
chrome.bluetooth.onDeviceRemoved.addListener(function(device) {
console.log(device.address);
});
Menemukan perangkat di sekitar
Untuk mulai menemukan perangkat di sekitar, gunakan metode bluetooth.startDiscovery. Penemuan dapat memerlukan banyak resource, jadi Anda harus memanggil bluetooth.stopDiscovery jika sudah selesai.
Anda harus memanggil bluetooth.startDiscovery setiap kali aplikasi perlu menemukan perangkat di sekitar.
Jangan membuat panggilan bersyarat pada properti discovering
dari bluetooth.AdapterState. Tujuan
akan berhasil meskipun aplikasi lain menemukan perangkat di sekitar, dan akan memastikan adaptor
terus melakukan penemuan setelah aplikasi lain itu berhenti.
Informasi tentang setiap perangkat yang baru ditemukan diterima menggunakan bluetooth.onDeviceAdded peristiwa. Untuk perangkat yang ditemukan baru-baru ini atau yang sebelumnya telah disambungkan dengan atau terhubung, acara tidak akan dikirim. Sebagai gantinya, Anda harus memanggil bluetooth.getDevices untuk mendapatkan informasi saat ini, dan menggunakan peristiwa bluetooth.onDeviceChanged untuk mendapatkan notifikasi mengubah informasi tersebut sebagai hasil penemuannya.
Contoh:
var device_names = {};
var updateDeviceName = function(device) {
device_names[device.address] = device.name;
};
var removeDeviceName = function(device) {
delete device_names[device.address];
}
// Add listeners to receive newly found devices and updates
// to the previously known devices.
chrome.bluetooth.onDeviceAdded.addListener(updateDeviceName);
chrome.bluetooth.onDeviceChanged.addListener(updateDeviceName);
chrome.bluetooth.onDeviceRemoved.addListener(removeDeviceName);
// With the listeners in place, get the list of devices found in
// previous discovery sessions, or any currently active ones,
// along with paired devices.
chrome.bluetooth.getDevices(function(devices) {
for (var i = 0; i < devices.length; i++) {
updateDeviceName(devices[i]);
}
});
// Now begin the discovery process.
chrome.bluetooth.startDiscovery(function() {
// Stop discovery after 30 seconds.
setTimeout(function() {
chrome.bluetooth.stopDiscovery(function() {});
}, 30000);
});
Jika pengguna menonaktifkan radio Bluetooth, semua sesi penemuan akan diakhiri dan tidak dilanjutkan
secara otomatis ketika radio dinyalakan. Jika hal ini penting bagi aplikasi Anda, Anda harus memperhatikan
bluetooth.onAdapterStateChanged. Jika properti discovering
berubah menjadi false
,
aplikasi Anda harus memanggil bluetooth.startDiscovery lagi untuk melanjutkan. Hati-hati terhadap
proses penemuan yang intensif
sumber daya.
Mengidentifikasi perangkat
Sejumlah opsi disediakan untuk mengidentifikasi perangkat yang dikembalikan oleh bluetooth.getDevices dan peristiwa terkait.
Jika perangkat mendukung spesifikasi ID Perangkat Bluetooth, beberapa properti akan ditambahkan ke objek Device berisi kolom yang didefinisikan oleh spesifikasi tersebut. Contoh:
chrome.bluetooth.getDevices(function(devices) {
for (var i = 0; i < devices.length; i++) {
if (devices[0].vendorIdSource != undefined) {
console.log(devices[0].address + ' = ' +
devices[0].vendorIdSource + ':' +
devices[0].vendorId.toString(16) + ':' +
devices[0].productId.toString(16) + ':' +
devices[0].deviceId.toString(16));
}
}
});
Spesifikasi ID Perangkat biasanya cukup untuk
mengidentifikasi model tertentu, dan bahkan revisi,
suatu perangkat dari vendor. Jika tidak ada, Anda harus mengandalkan informasi tentang
class atau jenis perangkat, secara opsional digabungkan dengan awalan produsen di address
.
Sebagian besar perangkat Bluetooth menyediakan informasi {i>Class of Device<i} sebagai
{i>bit-field<i} yang ditafsirkan sesuai dengan
dokumen Nomor yang Ditetapkan Baseband. Kolom bit ini tersedia di deviceClass
saat ini.
chrome.bluetooth.getDevices(function(devices) {
for (var i = 0; i < devices.length; i++) {
if (devices[0].vendorIdSource != undefined) {
console.log(devices[0].address + ' = ' +
devices[0].deviceClass.toString(16));
}
}
});
Mengurai kolom dapat menjadi hal yang rumit sehingga untuk jenis perangkat yang paling umum, Chrome akan menangani hal ini untuk Anda dan
menetapkan kolom type
. Jika hal ini tidak tersedia, atau tidak cukup untuk kebutuhan Anda, Anda harus
mengurai deviceClass
sendiri.
chrome.bluetooth.getDevices(function(devices) {
for (var i = 0; i < devices.length; i++) {
if (devices[0].vendorIdSource != undefined) {
console.log(devices[0].address + ' = ' + devices[0].type);
}
}
});
Menggunakan RFCOMM dan L2CAP
Aplikasi Chrome dapat membuat koneksi ke perangkat apa pun yang mendukung layanan RFCOMM atau L2CAP. Hal ini mencakup sebagian besar perangkat Bluetooth klasik di pasaran.
Menyambungkan ke soket
Untuk membuat koneksi ke perangkat, Anda memerlukan tiga hal. Soket untuk membuat koneksi dengan, dibuat menggunakan bluetoothSocket.create; alamat perangkat yang ingin Anda sambungkan, dan UUID layanan itu sendiri.
Sebelum membuat koneksi, Anda harus memverifikasi bahwa adaptor menyadari perangkat dengan menggunakan bluetooth.getDevice atau API penemuan perangkat.
Informasi yang diperlukan untuk membuat koneksi yang mendasarinya, termasuk apakah RFCOMM atau Protokol L2CAP harus digunakan dan saluran mana atau PSM, diperoleh menggunakan penemuan SDP pada perangkat seluler.
Contoh:
var uuid = '1105';
var onConnectedCallback = function() {
if (chrome.runtime.lastError) {
console.log("Connection failed: " + chrome.runtime.lastError.message);
} else {
// Profile implementation here.
}
};
chrome.bluetoothSocket.create(function(createInfo) {
chrome.bluetoothSocket.connect(createInfo.socketId,
device.address, uuid, onConnectedCallback);
});
Simpan handle ke socketId agar Anda nanti dapat mengirim data (bluetoothSocket.send) ke socketId ini .
Menerima dari dan mengirim ke soket
Penerimaan data dari dan pengiriman ke soket menggunakan objek ArrayBuffer
. Untuk mempelajari ArrayBuffers,
lihat ringkasan, array berjenis JavaScript, dan tutorial, Cara mengonversi ArrayBuffer
ke dan dari String.
Untuk mengirim data yang Anda miliki di arrayBuffer
, gunakan bluetoothSocket.send:
chrome.bluetoothSocket.send(socketId, arrayBuffer, function(bytes_sent) {
if (chrome.runtime.lastError) {
console.log("Send failed: " + chrome.runtime.lastError.message);
} else {
console.log("Sent " + bytes_sent + " bytes")
}
})
Berbeda dengan metode untuk mengirim data, data diterima dalam peristiwa (bluetoothSocket.onReceive. Soket dibuat tanpa jeda (lihat bluetoothSocket.setPaused) jadi pemroses untuk peristiwa ini biasanya ditambahkan antara bluetoothSocket.create dan bluetoothSocket.connect.
chrome.bluetoothSocket.onRecieve.addListener(function(receiveInfo) {
if (receiveInfo.socketId != socketId)
return;
// receiveInfo.data is an ArrayBuffer.
});
Menerima error dan pemutusan soket
Agar diberi tahu tentang error soket, termasuk pemutusan koneksi, tambahkan pemroses ke bluetoothSocket.onReceiveError.
chrome.bluetoothSocket.onReceiveError.addListener(function(errorInfo) {
// Cause is in errorInfo.error.
console.log(errorInfo.errorMessage);
});
Memutuskan sambungan dari soket
Untuk menutup koneksi dan memutuskan sambungan, gunakan bluetoothSocket.disconnect.
chrome.bluetoothSocket.disconnect(socketId);
Layanan publikasi
Selain membuat sambungan keluar ke perangkat, Aplikasi Chrome dapat memublikasikan layanan yang mungkin digunakan oleh perangkat apa pun yang mendukung RFCOMM atau L2CAP.
Mendengarkan di soket
Ada dua jenis layanan yang dipublikasikan. RFCOMM adalah skrip yang paling umum digunakan dan mencakup sebagian besar perangkat dan profil:
var uuid = '1105';
chrome.bluetoothSocket.create(function(createInfo) {
chrome.bluetoothSocket.listenUsingRfcomm(createInfo.socketId,
uuid, onListenCallback);
});
L2CAP adalah jenis perangkat yang lain dan mencakup jenis perangkat lain dan penggunaan khusus vendor seperti {i>firmware<i} mengupload.
var uuid = '0b87367c-f188-47cd-bc20-a5f4f70973c6';
chrome.bluetoothSocket.create(function(createInfo) {
chrome.bluetoothSocket.listenUsingL2cap(createInfo.socketId,
uuid, onListenCallback);
});
Dalam kedua kasus tersebut, bluetoothSocket.ListenOptions opsional dapat diteruskan untuk mengalokasikan
atau PSM. Callback menunjukkan error melalui chrome.runtime.lastError
dan berhasil
sebaliknya. Simpan handle untuk socketId agar Anda dapat menerima koneksi nanti
(bluetoothSocket.onAccept) dari soket ini.
Menerima koneksi klien
Koneksi klien diterima dan diteruskan ke aplikasi Anda melalui bluetoothSocket.onAccept.
chrome.bluetoothSocket.onAccept.addListener(function(acceptInfo) {
if (info.socketId != serverSocketId)
return;
// Say hello...
chrome.bluetoothSocket.send(acceptInfo.clientSocketId,
data, onSendCallback);
// Accepted sockets are initially paused,
// set the onReceive listener first.
chrome.bluetoothSocket.onReceive.addListener(onReceive);
chrome.bluetoothSocket.setPaused(false);
});
Berhenti menerima koneksi klien
Untuk berhenti menerima koneksi klien dan membatalkan publikasi layanan, gunakan bluetoothSocket.disconnect.
chrome.bluetoothSocket.disconnect(serverSocketId);
Berinteraksi dengan perangkat Hemat Energi
Bluetooth Energi Rendah atau (Bluetooth Smart) adalah teknologi nirkabel yang ditujukan untuk mengurangi daya pengguna. Bluetooth Low Energy API memungkinkan aplikasi menerapkan peran sentral dalam koneksi LE ke periferal. Bagian berikut menjelaskan cara menemukan, menghubungkan, dan berinteraksi dengan periferal Bluetooth Hemat Energi.
Menemukan dan menghubungkan ke periferal
Seperti perangkat Bluetooth tradisional, periferal LE dapat ditemukan menggunakan metode yang dijelaskan
di Menemukan perangkat di sekitar . Perangkat LE membuat dirinya dapat ditemukan dengan mengirimkan paket data
yang disebut "Data Iklan" dan perangkat dikatakan dalam mode iklan. Data iklan
mungkin berisi UUID layanan yang tersedia di perangkat. Jika ada, UUID ini akan
dapat diakses menggunakan properti uuids
dari objek bluetooth.Device yang sesuai.
Setelah ditemukan, perangkat LE dapat dihubungkan dengan memanggil bluetoothLowEnergy.connect sehingga aplikasi tersebut dapat berinteraksi dengan layanannya:
chrome.bluetooth.onDeviceAdded.addListener(function(device) {
var uuid = '0000180d-0000-1000-8000-00805f9b34fb';
if (!device.uuids || device.uuids.indexOf(uuid) < 0)
return;
// The device has a service with the desired UUID.
chrome.bluetoothLowEnergy.connect(device.address, function () {
if (chrome.runtime.lastError) {
console.log('Failed to connect: ' + chrome.runtime.lastError.message);
return;
}
// Connected! Do stuff...
...
});
});
Setelah terhubung, properti connected
dari objek bluetooth.Device yang sesuai akan
memiliki nilai true
. Memanggil bluetoothLowEnergy.connect akan menetapkan klaim oleh
aplikasi pada koneksi fisik ke perangkat. Koneksi fisik ke perangkat dapat dilakukan
tanpa pernah memanggil bluetoothLowEnergy.connect (misalnya karena aplikasi lain). Di beberapa
dalam hal ini, meskipun aplikasi Anda masih bisa
berinteraksi dengan layanan perangkat, aplikasi itu
selalu panggil bluetoothLowEnergy.connect untuk mencegah aplikasi lain memutuskan sambungan
tautan fisik.
Setelah aplikasi Anda tidak perlu terhubung lagi, aplikasi tersebut dapat menghapus klaimnya atas koneksi tersebut dengan memanggil bluetoothLowEnergy.disconnect:
chrome.bluetoothLowEnergy.disconnect(deviceAddress);
Perhatikan bahwa ini tidak berarti menghancurkan tautan fisik ke perangkat, karena mungkin ada aplikasi yang memiliki koneksi aktif ke perangkat. Terkadang perangkat dapat menjadi terputus karena alasan di luar kendali aplikasi (mis. jika perangkat menghilang atau secara eksplisit terputus oleh pengguna melalui utilitas sistem operasi). Aplikasi Anda harus mengamati peristiwa bluetooth.onDeviceChanged untuk mendapatkan notifikasi perubahan ke koneksi dan hubungkan kembali jika perlu.
Setelah terhubung, perangkat yang menjalankan Chrome akan berada di peran pusat, sedangkan perangkat jarak jauh disebut berada dalam peran periferal. Pada titik ini, aplikasi Anda dapat berinteraksi dengan layanan pada perangkat menggunakan metode yang dijelaskan di bagian berikut. Catatan: API saat ini tidak mendukung tindakan sebagai periferal LE; aplikasi hanya dapat menerapkan peran utamanya.
Layanan, Karakteristik, dan Deskripsi
Bluetooth Hemat Energi didasarkan pada protokol permintaan-respons sederhana yang disebut Protokol Atribut (ATT). Dengan menggunakan ATT, perangkat pusat berinteraksi dengan atribut yang disebut di perangkat periferal dengan mematuhi profil Bluetooth khusus yang disebut Profil Atribut Generik (GATT). GATT mendefinisikan konsep tingkat tinggi berikut:
- Layanan: Layanan GATT mewakili kumpulan data dan perilaku terkait untuk menyelesaikan fungsi tertentu dari suatu perangkat. Misalnya, pemantau detak jantung biasanya akan memiliki setidaknya satu "Layanan Detak Jantung". Informasi tentang layanan GATT terdapat dalam bluetoothLowEnergy.Service.
- Karakteristik: Karakteristik GATT adalah elemen data dasar yang digunakan untuk membangun layanan GATT, yang berisi nilai beserta properti yang menentukan cara akses nilai tersebut. Misalnya, "Layanan Detak Jantung" memiliki fitur "Pengukuran Detak Jantung" karakteristik, yang digunakan untuk memperoleh nilai detak jantung pengguna. Informasi tentang karakteristik GATT terdapat dalam bluetoothLowEnergy.Characteristic.
- Deskripsi: Deskriptor karakteristik GATT berisi informasi lebih lanjut tentang suatu karakteristik. Informasi tentang deskripsi karakteristik GATT terdapat dalam bluetoothLowEnergy.Descriptor.
API Bluetooth Low Energy memungkinkan aplikasi menemukan informasi tentang
layanan, karakteristik, dan deskriptor dengan memanggil bluetoothLowEnergy.getServices,
bluetoothLowEnergy.getCharacteristics, dan bluetoothLowEnergy.getDescriptors. Aplikasi dapat
memfilter layanan, karakteristik, dan deskripsi dengan membandingkan kolom uuid
dengan
UUID GATT yang diinginkan:
chrome.bluetoothLowEnergy.getServices(deviceAddress, function(services) {
...
for (var i = 0; i < services.length; i++) {
if (services[i].uuid == HEART_RATE_SERVICE_UUID) {
heartRateService = services[i];
break;
}
}
...
});
Setiap layanan, karakteristik, dan deskriptor yang dapat diakses melalui API akan diberi
ID instance, yang dapat diperoleh menggunakan kolom instanceId
. ID instance ini dapat
digunakan untuk mengidentifikasi objek GATT dan melakukan operasi khusus pada objek tersebut:
chrome.bluetoothLowEnergy.getCharacteristics(heartRateService.instanceId,
function(chracteristics) {
...
for (var i = 0; i < characteristics.length; i++) {
if (characteristics[i].uuid == HEART_RATE_MEASUREMENT_UUID) {
measurementChar = characteristics[i];
break;
}
}
...
chrome.bluetoothLowEnergy.getDescriptors(measurementChar.instanceId,
function(descriptors) {
...
});
});
Peristiwa layanan
Setelah perangkat terhubung, Chrome akan menemukan layanannya. Saat setiap layanan ditemukan dan dihapus, aplikasi akan menerima sertifikat bluetoothLowEnergy.onServiceAdded dan Peristiwa bluetoothLowEnergy.onServiceRemoved:
var initializeService = function(service) {
if (!service) {
console.log('No service selected!');
// Reset UI, etc.
...
return;
}
myService = service;
// Get all the characteristics and descriptors and bootstrap the app.
...
};
chrome.bluetoothLowEnergy.onServiceAdded.addListener(function(service) {
if (service.uuid == MY_SERVICE_UUID)
initializeService(service);
});
chrome.bluetoothLowEnergy.onServiceRemoved.addListener(function(service) {
if (service.instanceId == myService.instanceId)
initializeService(null);
});
Chrome akan menemukan semua karakteristik dan deskripsi layanan secara asinkron, lalu mengirimkan bluetoothLowEnergy.onServiceAdded setelah penemuan selesai. Jika koneksi ke perangkat periferal akan dihentikan, Chrome akan menghapus semua layanan terkait dan mengirimkan bluetoothLowEnergy.onServiceRemoved.
Beberapa periferal dapat mengubah layanannya, misalnya karakteristik suatu layanan dapat berubah atau layanan mungkin ditambahkan dan dihapus sepenuhnya. Chrome memberi tahu aplikasi tentang perubahan tersebut menggunakan bluetoothLowEnergy.onServiceChanged, bluetoothLowEnergy.onServiceAdded, dan Peristiwa bluetoothLowEnergy.onServiceRemoved.
chrome.bluetoothLowEnergy.onServiceChanged.addListener(function(service) {
if (service.instanceId != myService.instanceId)
return;
updateMyService(service);
});
Membaca dan menulis nilai karakteristik
Karakteristik GATT mengkodekan satu aspek layanannya. Aplikasi pusat membaca, menindaklanjuti, dan mengubah status layanan periferal dengan beroperasi berdasarkan nilai karakteristik. Karakteristik adalah urutan byte dan artinya didefinisikan oleh spesifikasi tingkat tinggi yang mendefinisikan karakteristik tertentu. Misalnya, nilai karakteristik Pengukuran Detak Jantung mengenkode detak jantung pengguna dan jumlah total kalori yang telah dibakar, sedangkan Sensor Tubuh Karakteristik lokasi mengenkode sensor detak jantung di dalam tubuh.
Chrome menyediakan metode bluetoothLowEnergy.readCharacteristicValue untuk membaca nilai karakteristik:
chrome.bluetoothLowEnergy.readCharacteristicValue(chrc.instanceId,
function(result) {
if (chrome.runtime.lastError) {
console.log('Failed to read value: ' + chrome.runtime.lastError.message);
return;
}
var bytes = new Uint8Array(result.value);
// Do stuff with the bytes.
...
});
Beberapa karakteristik dapat ditulis, terutama yang berperilaku sebagai "{i>Control Points<i}", di mana menulis nilai tersebut memiliki efek samping. Misalnya, karakteristik Titik Kontrol Detak Jantung digunakan untuk memberi tahu sensor detak jantung untuk mereset jumlah total kalori yang terbakar dan hanya mendukung penulisan. Kepada mencapai hal ini, Chrome menyediakan metode bluetoothLowEnergy.writeCharacteristicValue:
var myBytes = new Uint8Array([ ... ]);
chrome.bluetoothLowEnergy.writeCharacteristicValue(chrc.instanceId,
myBytes.buffer,
function() {
if (chrome.runtime.lastError) {
console.log('Failed to write value: ' +
chrome.runtime.lastError.message);
return;
}
// Value is written now.
});
Deskripsi karakteristik berperilaku dengan cara yang sama dan dapat dibaca dan/atau dapat ditulis. Chrome menyediakan nilai bluetoothLowEnergy.readDescriptorValue dan bluetoothLowEnergy.writeDescriptorValue metode untuk membaca dan menulis nilai deskriptor.
Untuk memeriksa apakah karakteristik mendukung pembacaan atau penulisan, aplikasi dapat memeriksa properties
kolom objek bluetoothLowEnergy.Characteristic. Meskipun kolom ini tidak berisi
informasi tentang persyaratan keamanan untuk mengakses suatu nilai, hal itu menjelaskan nilai mana
yang didukung oleh karakteristik secara umum.
Menangani notifikasi nilai
Beberapa karakteristik membuat nilainya diketahui menggunakan notifikasi atau indikasi. Misalnya, Karakteristik Pengukuran Detak Jantung tidak dapat dibaca atau ditulis tetapi mengirim pembaruan pada nilai saat ini dengan interval yang teratur. Aplikasi dapat mendengarkan notifikasi ini menggunakan bluetoothLowEnergy.onCharacteristicValueChanged.
chrome.bluetoothLowEnergy.onCharacteristicValueChanged.addListener(
function(chrc) {
if (chrc.instanceId != myCharId)
return;
var bytes = new Uint8Array(chrc.value);
// Do stuff with the bytes.
...
});
Meskipun karakteristik mendukung notifikasi/indikasi, fitur tersebut tidak diaktifkan secara default. Channel aplikasi harus memanggil metode bluetoothLowEnergy.startCharacteristicNotifications dan Metode bluetoothLowEnergy.stopCharacteristicNotifications untuk memulai atau berhenti menerima Peristiwa bluetoothLowEnergy.onCharacteristicValueChanged.
// Start receiving characteristic value notifications.
var notifying = false;
chrome.bluetoothLowEnergy.startCharacteristicNotifications(chrc.instanceId,
function() {
if (chrome.runtime.lastError) {
console.log('Failed to enable notifications: ' +
chrome.runtime.lastError.message);
return;
}
notifying = true;
});
...
// No longer interested in notifications from this characteristic.
if (notifying) {
chrome.bluetoothLowEnergy.stopCharacteristicNotifications(
chrc.instanceId);
}
Setelah notifikasi dimulai, aplikasi akan menerima bluetoothLowEnergy.onCharacteristicValueChanged setiap kali notifikasi atau indikasi yang diterima dari karakteristik. Jika karakteristik mendukung operasi baca, maka peristiwa ini juga akan dikirim setelah panggilan ke bluetoothLowEnergy.readCharacteristicValue berhasil. Ini memungkinkan aplikasi untuk menyatukan alur kontrol pembaruan nilai yang dipicu melalui permintaan baca dan notifikasi:
chrome.bluetoothLowEnergy.onCharacteristicValueChanged.addListener(
function(chrc) {
// Process the value.
...
});
chrome.bluetoothLowEnergy.startCharacteristicNotifications(chrc.instanceId,
function() {
// Notifications started. Read the initial value.
chrome.bluetoothLowEnergy.readCharacteristicValue(chrc.instanceId,
function(result) {
...
// No need to do anything here since onCharacteristicValueChanged
// will handle it.
});
});
Jika karakteristik mendukung notifikasi, kolom properties
-nya akan berisi baik
"notify"
atau "indicate"
.
CATATAN: Jika karakteristik mendukung notifikasi/indikasi, karakteristik tersebut akan memiliki opsi "Klien Konfigurasi Karakteristik" untuk mengaktifkan/menonaktifkan notifikasi. Chrome tidak mengizinkan aplikasi untuk menulis ke deskriptor ini. Sebagai gantinya, aplikasi harus menggunakan bluetoothLowEnergy.startCharacteristicNotifications dan Metode bluetoothLowEnergy.stopCharacteristicNotifications untuk mengontrol perilaku notifikasi.