Ten dokument opisuje, jak używać Bluetooth, gniazda Bluetooth i Bluetooth Low Interfejsy API Energy do komunikacji z urządzeniami Bluetooth i Bluetooth Low Energy.
Podstawowe informacje o Bluetooth znajdziesz w oficjalnych specyfikacjach Bluetootha.
Wymagania dotyczące pliku manifestu
W przypadku aplikacji Chrome, które używają Bluetootha, dodaj do pliku manifestu wpis Bluetooth i określ, jeśli identyfikatory UUID profili, protokołów lub usług, które chcesz wdrożyć, oraz które chcesz wdrożyć za pomocą interfejsów API Socket lub Low Energy.
Przykład dla implementacji za pomocą gniazda:
"bluetooth": {
"uuids": [ "1105", "1106" ],
"socket": true
}
Jeśli chcesz korzystać z małego zużycia energii:
"bluetooth": {
"uuids": [ "180D", "1809", "180F" ],
"low_energy": true
}
Aby uzyskiwać dostęp tylko do stanu adaptera, wykrywać urządzenia w pobliżu i uzyskiwać podstawowe informacje o urządzeniach: wymagany jest tylko sam wpis:
"bluetooth": {}
Informacje o karcie
Uzyskiwanie stanu adaptera
Aby uzyskać stan adaptera Bluetooth, użyj metody bluetooth.getAdapterState:
chrome.bluetooth.getAdapterState(function(adapter) {
console.log("Adapter " + adapter.address + ": " + adapter.name);
});
Powiadomienia dotyczące karty
Zdarzenie bluetooth.onAdapterStateChanged jest wysyłane za każdym razem, gdy zmienia się stan adaptera. Może to spowodować służy na przykład do określania, kiedy adapter radiowy jest włączony, a kiedy wyłączony.
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");
}
}
});
Informacje o urządzeniu
Wyświetlanie listy znanych urządzeń
Aby zobaczyć listę urządzeń znanych z adaptera Bluetootha, użyj polecenia bluetooth.getDevices :
chrome.bluetooth.getDevices(function(devices) {
for (var i = 0; i < devices.length; i++) {
console.log(devices[i].address);
}
});
Zwrócone zostaną wszystkie urządzenia, w tym te sparowane i niedawno wykryte. Nie rozpocząć wykrywanie nowych urządzeń (patrz Wykrywanie urządzeń w pobliżu).
Otrzymywanie powiadomień na urządzeniu
Zamiast wielokrotnie wywoływać funkcję bluetooth.getDevices, możesz używać bluetooth.onDeviceAdded, bluetooth.onDeviceChanged i bluetooth.onDeviceRemoved wydarzenia, aby otrzymywać powiadomienia.
Zdarzenie bluetooth.onDeviceAdded jest wysyłane za każdym razem, gdy urządzenie zostanie wykryte przez adapter lub nawiązuje połączenie z adapterem:
chrome.bluetooth.onDeviceAdded.addListener(function(device) {
console.log(device.address);
});
Dodanie detektora tego zdarzenia nie rozpocznie wykrywania urządzeń (patrz Wykrywanie w pobliżu urządzenia).
Zmiany w urządzeniach, w tym wcześniej wykryte urządzenia będące sparowanymi, są powiadamiane przez Zdarzenie bluetooth.onDeviceChanged:
chrome.bluetooth.onDeviceChanged.addListener(function(device) {
console.log(device.address);
});
Zdarzenie bluetooth.onDeviceRemoved jest wysyłane za każdym razem, gdy sparowane urządzenie zostanie usunięte z systemu lub wykryte urządzenie nie było ostatnio wykrywane:
chrome.bluetooth.onDeviceRemoved.addListener(function(device) {
console.log(device.address);
});
Wykrywanie urządzeń w pobliżu
Aby rozpocząć wykrywanie urządzeń w pobliżu, użyj metody bluetooth.startDiscovery. Odkrywanie może wymaga wielu zasobów, więc po ich zakończeniu użyj wywołania bluetooth.stopDiscovery.
Wywołuj funkcję bluetooth.startDiscovery za każdym razem, gdy aplikacja chce wykryć urządzenia w pobliżu.
Nie traktuj wywołania jako warunkowego we właściwości discovering
bluetooth.AdapterState.
uda się przeprowadzić wywołanie, nawet jeśli inna aplikacja wykryje urządzenia w pobliżu i zapewni,
nadal wykrywa treści po zatrzymaniu tej innej aplikacji.
Informacje o każdym nowo wykrytych urządzeniach są odbierane za pomocą parametru bluetooth.onDeviceAdded. . Dotyczy urządzeń, które zostały niedawno wykryte lub zostały wcześniej sparowane lub połączone, wydarzenie nie zostanie wysłane. Zamiast tego wywołaj bluetooth.getDevices, aby uzyskać aktualne informacje i użyć zdarzenia bluetooth.onDeviceChanged, aby otrzymywać powiadomienia o zmian w tych informacjach w wyniku ich wykrycia.
Przykład:
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);
});
Jeśli użytkownik wyłączy radio Bluetooth, wszystkie sesje wykrywania zostaną zakończone i nie zostaną wznowione
automatycznie po włączeniu radia. Jeśli ma to znaczenie dla Twojej aplikacji, obejrzyj
Zdarzenie bluetooth.onAdapterStateChanged. Jeśli właściwość discovering
zmieni się na false
,
Aby wznowić, aplikacja będzie musiała ponownie wywołać funkcję bluetooth.startDiscovery. Uważaj na
niewymagających zasobów.
Identyfikowanie urządzeń
Dostępnych jest wiele różnych opcji identyfikacji urządzeń zwracanych przez bluetooth.getDevices i powiązane zdarzenia.
Jeśli urządzenie obsługuje specyfikację identyfikatora urządzenia Bluetooth, do aplikacji zostanie dodanych kilka właściwości Obiekt urządzenia zawierający pola zdefiniowane w tej specyfikacji. Przykład:
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));
}
}
});
Do identyfikacji konkretnego modelu, a nawet jego wersji, wystarcza zwykle specyfikacja identyfikatora urządzenia.
urządzenia od dostawcy. Jeśli nie są one podane, należy polegać na informacjach na temat
klasa lub typ urządzenia, opcjonalnie połączone z prefiksem producenta w atrybucie address
.
Większość urządzeń Bluetooth podaje informacje o klasie urządzeń w postaci pola bitowego interpretowanego zgodnie z
dokument Baseband Assigned Numbers (Przypisane numery pasma bazowego). To pole bitowe jest dostępne w: deviceClass
usłudze.
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));
}
}
});
Analiza tego pola może być skomplikowana, więc na najpopularniejszych typach urządzeń Chrome robi to za Ciebie,
ustawia pole type
. Jeśli ta funkcja nie jest dostępna lub nie odpowiada Twoim potrzebom, musisz
samodzielnie przeanalizuj deviceClass
.
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);
}
}
});
Korzystanie z RFCOMM i L2CAP
Aplikacje Chrome mogą nawiązywać połączenia z dowolnym urządzeniem obsługującym usługi RFCOMM lub L2CAP. Obejmuje to m.in. z większością klasycznych urządzeń Bluetooth dostępnych na rynku.
Podłączanie gniazdka
Aby połączyć się z urządzeniem, potrzebujesz trzech rzeczy. Gniazdo do nawiązywania połączenia z, utworzony za pomocą bluetoothSocket.create; adres urządzenia, z którym chcesz się połączyć; oraz identyfikator UUID samej usługi.
Przed nawiązaniem połączenia upewnij się, że ładowarka zna urządzenie, korzystając z bluetooth.getDevice lub interfejsy API do wykrywania urządzeń.
Informacje niezbędne do nawiązania bazowego połączenia, w tym informacje o tym, czy RFCOMM czy Należy stosować protokół L2CAP oraz określić, który kanał lub PSM jest uzyskiwany za pomocą wykrywania SDP urządzenia.
Przykład:
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);
});
Trzymaj uchwyt socketId, aby móc później wysyłać do niego dane (bluetoothSocket.send) gniazda elektrycznego.
Odbieranie i wysyłanie z gniazda
Do odbierania i wysyłania danych z gniazda są używane obiekty ArrayBuffer
. Aby dowiedzieć się więcej o obiekcie ArrayBuffers,
zapoznaj się z omówieniem, tablicami z JavaScriptem i samouczkiem How to conversion TrackBuffer.
do i z ciągu znaków.
Aby wysłać dane, które posiadasz w arrayBuffer
, użyj 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")
}
})
W przeciwieństwie do metody wysyłania danych dane są odbierane w zdarzeniu. (bluetoothSocket.onReceive. Gniazdka są tworzone bez wstrzymania (patrz bluetoothSocket.setPaused). więc odbiornik tego zdarzenia jest zwykle dodawany między bluetoothSocket.create i bluetoothSocket.connect
chrome.bluetoothSocket.onRecieve.addListener(function(receiveInfo) {
if (receiveInfo.socketId != socketId)
return;
// receiveInfo.data is an ArrayBuffer.
});
Otrzymuje błędy gniazda i odłączenie
Aby otrzymywać powiadomienia o błędach gniazda, w tym o rozłączeniu, dodaj detektor do Zdarzenie bluetoothSocket.onReceiveError.
chrome.bluetoothSocket.onReceiveError.addListener(function(errorInfo) {
// Cause is in errorInfo.error.
console.log(errorInfo.errorMessage);
});
Odłączanie od gniazdka
Aby rozłączyć połączenie i odłączyć gniazdko, użyj polecenia bluetoothSocket.disconnect.
chrome.bluetoothSocket.disconnect(socketId);
Usługi wydawnicze
Oprócz nawiązywania połączeń wychodzących z urządzeniami Aplikacje Chrome mogą publikować usługi, które mogą być na dowolnym urządzeniu obsługującym RFCOMM lub L2CAP.
Słuchanie w gniazdku
Obsługiwane są 2 typy opublikowanej usługi. RFCOMM jest najczęściej używany i obejmuje większość urządzeń i profili:
var uuid = '1105';
chrome.bluetoothSocket.create(function(createInfo) {
chrome.bluetoothSocket.listenUsingRfcomm(createInfo.socketId,
uuid, onListenCallback);
});
Druga kategoria to L2CAP, która obejmuje inne typy urządzeń oraz zastosowania specyficzne dla danego dostawcy, takie jak oprogramowanie układowe. przesyłanie.
var uuid = '0b87367c-f188-47cd-bc20-a5f4f70973c6';
chrome.bluetoothSocket.create(function(createInfo) {
chrome.bluetoothSocket.listenUsingL2cap(createInfo.socketId,
uuid, onListenCallback);
});
W obu przypadkach można przekazać opcjonalny parametr bluetoothSocket.ListenOptions, aby przydzielić określony
lub PSM. Wywołanie zwrotne wskazuje błąd poprzez chrome.runtime.lastError
i powodzenie
w przeciwnym razie. Zachowaj uchwyt socketId, aby móc później akceptować połączenia
(bluetoothSocket.onAccept) z tego gniazda.
Akceptowanie połączeń z klientem
Połączenia klientów są akceptowane i przekazywane do aplikacji za pomocą Zdarzenie 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);
});
Przestań akceptować połączenia z klientami
Aby przestać akceptować połączenia z klientem i cofnąć publikację usługi, użyj polecenia bluetoothSocket.disconnect.
chrome.bluetoothSocket.disconnect(serverSocketId);
Interakcja z urządzeniami o niskiej energii
Bluetooth Low Energy lub (Bluetooth Smart) to technologia bezprzewodowa ukierunkowana na mniejszą moc. konsumpcją treści. Interfejs API Bluetooth Low Energy pozwala aplikacjom realizować główną rolę przez połączenie LE z urządzeniem peryferyjnym. W poniższych sekcjach dowiesz się, jak odkrywać, nawiązywać kontakty i nawiązywać kontakt współdziałają z urządzeniami peryferyjnymi Bluetooth Low Energy.
Wykrywanie urządzeń peryferyjnych i łączenie się z nimi
Podobnie jak w przypadku tradycyjnych urządzeń Bluetooth, urządzenia peryferyjne LE można wykryć za pomocą opisanych metod.
w artykule Wykrywanie urządzeń w pobliżu . Urządzenie LE staje się wykrywalne przez wysyłanie pakietów danych
„Dane reklamowe” a urządzenie ma włączony tryb reklamowy. Dane reklamowe
może zawierać identyfikatory UUID usług dostępnych na urządzeniu. Jeśli identyfikatory UUID są obecne,
jest dostępna przy użyciu właściwości uuids
odpowiedniego obiektu bluetooth.Device.
Z wykrytym urządzeniem LE można się połączyć, wywołując bluetoothLowEnergy.connect. że aplikacja może wchodzić w interakcje ze swoimi usługami:
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...
...
});
});
Po nawiązaniu połączenia właściwość connected
odpowiedniego obiektu bluetooth.Device zostanie
mają wartość true
. Wywołanie bluetoothLowEnergy.connect powoduje zgłoszenie roszczenia przez
jest dostępna na fizycznym połączeniu z urządzeniem. Może istnieć fizyczne połączenie z urządzeniem
bez wywoływania funkcji bluetoothLowEnergy.connect (na przykład z powodu innej aplikacji). W
w tym przypadku, chociaż aplikacja może nadal korzystać z usług urządzenia, powinna
zawsze wywołaj bluetoothLowEnergy.connect, aby inna aplikacja nie mogła odłączyć
fizyczny link.
Gdy aplikacja nie będzie już połączona, może usunąć rezerwację połączenia przez Wywołuję bluetoothLowEnergy.disconnect:
chrome.bluetoothLowEnergy.disconnect(deviceAddress);
Pamiętaj, że nie musi to spowodować zniszczenia fizycznego linku do urządzenia, bo mogą istnieć inne w aplikacjach, które mają aktywne połączenia z urządzeniem. Czasami urządzenie może stać się zostało odłączone z powodów, które są poza kontrolą aplikacji (np. jeśli urządzenie znika lub zostaje bezpośrednio odłączony przez użytkownika za pomocą narzędzi systemu operacyjnego). Aby otrzymywać powiadomienia o zmianach, aplikacja powinna obserwować zdarzenie bluetooth.onDeviceChanged w przeglądarce i w razie potrzeby połączyć się ponownie.
Po nawiązaniu połączenia urządzenie z Chrome będzie miało tzw. rolę centralną, a urządzenie zdalne jest nazywane urządzeniem peryferyjnym. W tym momencie aplikacja może wchodzić w interakcję z usługami na urządzeniu przy użyciu metod opisanych w następnej sekcji. Uwaga: atrybut Interfejsy API nie obsługują obecnie działania jako urządzenia peryferyjnego LE. aplikacje mogą natomiast obsługiwać tylko główną rolę.
Usługi, cechy i deskryptory
Bluetooth Low Energy działa w oparciu o prosty protokół odpowiedzi żądania nazywany protokołem atrybutów (ATT). Dzięki ATT urządzenie centralne wchodzi w interakcję z tak zwanymi atrybutami na urządzeniu peryferyjnym. tworząc specjalny profil Bluetooth nazywany profilem atrybutów ogólnych (GATT). GATT, definiuje te ogólne koncepcje:
- Usługa: usługa GATT reprezentuje zbieranie danych i powiązanych z nimi zachowań w celu realizacji dla konkretnej funkcji urządzenia. Na przykład pulsometr ma zazwyczaj co najmniej jedną "usługę pomiaru tętna". Informacje o usłudze GATT znajdują się w obiekt bluetoothLowEnergy.Service.
- Cecha: charakterystyka GATT to podstawowy element danych używany do konstruowania usługi GATT. zawiera wartość wraz z właściwościami, które określają sposób uzyskania dostępu do tej wartości. Przykład: "usługi pomiaru tętna" ma „Pomiar tętna” , która służy do uzyskania wartość tętna użytkownika. Informacje o cechy GATT znajdują się w Obiekt bluetoothLowEnergy.Characteristic.
- Opis: deskryptor cechy GATT zawiera dodatkowe informacje na temat cechy. Informacje o deskryptorze cechy GATT znajdują się w Obiekt bluetoothLowEnergy.Descriptor.
Interfejs API Bluetooth Low Energy umożliwia aplikacjom znajdowanie informacji na temat
usług, charakterystyki i deskryptorów, wywołując bluetoothLowEnergy.getServices,
bluetoothLowEnergy.getCharacteristics i bluetoothLowEnergy.getDescriptors. Aplikacje mogą
filtrować usługi, cechy i deskryptory, porównując ich pole uuid
z
wybrany identyfikator UUID GATT:
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;
}
}
...
});
Do każdej usługi, cechy i deskryptora dostępnego za pośrednictwem interfejsu API zostaje przypisany
identyfikatora instancji, który można uzyskać za pomocą pola instanceId
. Takim identyfikatorem instancji może być
służą do identyfikowania obiektu GATT i wykonywania na nim konkretnych operacji:
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) {
...
});
});
Zdarzenia usługi
Gdy urządzenie się połączy, Chrome wykryje swoje usługi. Przy wykrywaniu każdej usługi aplikacja zostanie usunięta, aplikacja otrzyma parametr bluetoothLowEnergy.onServiceAdded i Zdarzenia 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 asynchronicznie wykrywa wszystkie cechy i deskryptory usługi oraz wysyła zdarzenie bluetoothLowEnergy.onServiceAdded po zakończeniu wykrywania. Jeśli połączenie z urządzenie peryferyjne, zostanie usunięte, Chrome usunie wszystkie powiązane usługi i wyśle Zdarzenie bluetoothLowEnergy.onServiceRemoved.
Niektóre urządzenia peryferyjne mogą modyfikować swoje usługi, np. charakterystyka usługi może ulec zmianie lub mogą zostać dodane i całkowicie usunięte. Chrome powiadamia aplikacje o tych zmianach za pomocą bluetoothLowEnergy.onServiceChanged, bluetoothLowEnergy.onServiceAdded i Zdarzenia bluetoothLowEnergy.onServiceRemoved.
chrome.bluetoothLowEnergy.onServiceChanged.addListener(function(service) {
if (service.instanceId != myService.instanceId)
return;
updateMyService(service);
});
Odczytywanie i zapisywanie wartości cechy
Cecha GATT koduje jeden aspekt swojej usługi. Centralna aplikacja odczytuje, modyfikuje i podejmuje działania stan usługi urządzenia peryferyjnego na podstawie wartości cechy. Cecha jest ciągiem bajtów, a jej znaczenie jest określone przez specyfikację wysokiego poziomu, która definiuje do określonej cechy. Na przykład wartość właściwości Pomiar tętna koduje tętno użytkownika i łączną liczbę spalonych kalorii, a czujnik na ciele Parametr lokalizacji wskazuje, gdzie w ciele należy nosić czujnik tętna.
Chrome udostępnia metodę bluetoothLowEnergy.readCharacteristicValue, aby odczytywać wartość charakterystyczna:
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.
...
});
Niektóre cechy można zapisać, zwłaszcza te występujące jako „punkty kontrolne”, gdzie pisanie ma skutki uboczne. Na przykład cecha Punkt kontroli tętna jest używana do poproś czujnika tętna o zresetowanie łącznej liczby spalonych kalorii i obsługę tylko zapisów. Do aby to osiągnąć, Chrome udostępnia metodę 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.
});
Deskryptory charakterystyczne działają w ten sam sposób i mogą być czytelne i do zapisu. Chrome zapewnia: bluetoothLowEnergy.readDescriptorValue i bluetoothLowEnergy.writeDescriptorValue do odczytywania i zapisywania wartości deskryptora.
Aby sprawdzić, czy dana cecha obsługuje odczyty lub zapisy, aplikacja może sprawdzić properties
obiektu bluetoothLowEnergy.Characteristic. To pole nie zawiera
informacji o wymaganiach w zakresie bezpieczeństwa potrzebnych do uzyskania dostępu do wartości, wskazuje, która wartość
obsługuje ogólnie cechę.
Obsługa powiadomień o wartościach
Niektóre cechy określają ich wartość za pomocą powiadomień lub wskazówek. Na przykład plik Cecha pomiaru tętna jest nieczytelna ani możliwa do zapisu, ale wysyła aktualizacje na w regularnych odstępach czasu. Aplikacje mogą odsłuchiwać te powiadomienia za pomocą Zdarzenie bluetoothLowEnergy.onCharacteristicValueChanged.
chrome.bluetoothLowEnergy.onCharacteristicValueChanged.addListener(
function(chrc) {
if (chrc.instanceId != myCharId)
return;
var bytes = new Uint8Array(chrc.value);
// Do stuff with the bytes.
...
});
Nawet jeśli dana cecha obsługuje powiadomienia lub wskazówki, nie są one domyślnie włączone. An aplikacja powinna wywoływać metody bluetoothLowEnergy.startCharacteristicNotifications i metod bluetoothLowEnergy.stopCharacteristicNotifications, aby włączyć lub wyłączyć otrzymywanie Zdarzenie 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);
}
Po uruchomieniu powiadomień aplikacja otrzyma bluetoothLowEnergy.onCharacteristicValueChanged, za każdym razem, gdy pojawi się powiadomienie lub wskazanie. otrzymywane z cechy. Jeśli cecha obsługuje odczyty, zdarzenie to również jest wysłane po udanym wywołaniu bluetoothLowEnergy.readCharacteristicValue. Zezwala to aplikacjom aby ujednolicić przepływ kontroli aktualizacji wartości aktywowanej za pomocą żądania odczytu i powiadomień:
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.
});
});
Jeśli cecha obsługuje powiadomienia, jej pole properties
będzie zawierać albo
Usługa "notify"
lub "indicate"
.
UWAGA: jeśli cecha obsługuje powiadomienia/wskazania, będzie miała Konfiguracja cechy” deskryptor do włączania/wyłączania powiadomień. Przeglądarka Chrome nie zezwala do zapisywania w tym deskryptorach. Aplikacje powinny zamiast tego używać bluetoothLowEnergy.startCharacteristicNotifications i metody bluetoothLowEnergy.stopCharacteristicNotifications do sterowania zachowaniem powiadomień.