이 문서에서는 블루투스, 블루투스 소켓 및 블루투스 낮음 기능을 사용하는 방법을 설명합니다. Energy API를 사용하여 블루투스 및 저전력 블루투스 기기와 통신합니다.
블루투스에 대한 배경 정보는 공식 블루투스 사양을 참조하세요.
매니페스트 요구사항
블루투스를 사용하는 Chrome 앱의 경우 매니페스트에 bluetooth 항목을 추가하고 다음 사항을 지정합니다. 구현하려는 프로필, 프로토콜 또는 서비스의 UUID 및 소켓 및/또는 저전력 API를 사용하여 이를 구현하는 것이 좋습니다.
소켓 구현의 예는 다음과 같습니다.
"bluetooth": {
"uuids": [ "1105", "1106" ],
"socket": true
}
저전력 구현의 경우 다음과 같습니다.
"bluetooth": {
"uuids": [ "180D", "1809", "180F" ],
"low_energy": true
}
어댑터 상태에만 액세스하고, 근처 기기를 탐색하고, 기기에 관한 기본 정보를 가져오기 위해 항목 자체만 필요합니다.
"bluetooth": {}
어댑터 정보
어댑터 상태 가져오기
블루투스 어댑터의 상태를 가져오려면 bluetooth.getAdapterState 메서드를 사용합니다.
chrome.bluetooth.getAdapterState(function(adapter) {
console.log("Adapter " + adapter.address + ": " + adapter.name);
});
어댑터 알림
어댑터 상태가 변경될 때마다 bluetooth.onAdapterStateChanged 이벤트가 전송됩니다. 이렇게 하면 예를 들어 어댑터 무선의 전원이 켜지거나 꺼지는 시점을 결정하는 데 사용됩니다.
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");
}
}
});
기기 정보
알려진 기기 나열
블루투스 어댑터에 알려진 기기 목록을 가져오려면 bluetooth.getDevices를 사용합니다. 메서드를 사용하여 축소하도록 요청합니다.
chrome.bluetooth.getDevices(function(devices) {
for (var i = 0; i < devices.length; i++) {
console.log(devices[i].address);
}
});
페어링된 기기 및 최근에 발견된 기기를 포함한 모든 기기가 반환됩니다. 하지만 새 기기를 검색합니다 (근처 기기 검색 참고).
기기 알림 수신
bluetooth.getDevices를 반복적으로 호출하는 대신 bluetooth.onDeviceAdded, bluetooth.onDeviceChanged, bluetooth.onDeviceRemoved가 포함됩니다. 알림을 수신할 수 있습니다.
bluetooth.onDeviceAdded 이벤트는 어댑터에서 기기를 찾을 때마다 또는 는 어댑터에 연결합니다.
chrome.bluetooth.onDeviceAdded.addListener(function(device) {
console.log(device.address);
});
이 이벤트에 리스너를 추가해도 기기 검색이 시작되지 않습니다 (주변 검색 기능 참조). 기기)에서 사용할 수 있습니다.
이전에 검색된 기기 페어링 등 기기 변경사항은 bluetooth.onDeviceChanged 이벤트를 수신합니다.
chrome.bluetooth.onDeviceChanged.addListener(function(device) {
console.log(device.address);
});
마지막으로 페어링된 기기가 삭제될 때마다 bluetooth.onDeviceRemoved 이벤트가 전송됩니다. 시스템에 문제가 있거나 발견된 기기가 최근에 확인되지 않았습니다.
chrome.bluetooth.onDeviceRemoved.addListener(function(device) {
console.log(device.address);
});
근처 기기 검색 중
근처 기기 검색을 시작하려면 bluetooth.startDiscovery 메서드를 사용합니다. 디스커버리는 리소스를 많이 사용해야 하므로 완료되면 bluetooth.stopDiscovery를 호출해야 합니다.
앱이 근처 기기를 검색해야 할 때마다 bluetooth.startDiscovery를 호출해야 합니다.
bluetooth.AdapterState의 discovering
속성에 대한 조건부 호출을 만들지 마세요. 이
호출은 다른 앱이 근처 기기를 검색하고 있더라도 성공하며, 어댑터가
다른 앱이 중지된 후에도 검색을 계속 수행합니다.
새로 검색된 각 기기에 관한 정보는 bluetooth.onDeviceAdded를 사용하여 수신됩니다. 이벤트를 처리합니다. 최근에 검색되었거나 이전에 페어링된 기기 이벤트가 전송되지 않습니다. 대신 bluetooth.getDevices를 호출하여 현재 정보를 가져오고 bluetooth.onDeviceChanged 이벤트를 사용하여 그 정보를 변경하는 것을 의미합니다.
예:
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);
});
사용자가 블루투스 무선 기능을 끄면 모든 검색 세션이 종료되고 재개되지 않습니다.
될 것입니다. 이 기능이 앱에 중요하다면
bluetooth.onAdapterStateChanged 이벤트를 수신합니다. discovering
속성이 false
로 변경되면
재개하려면 앱에서 bluetooth.startDiscovery를 다시 호출해야 합니다. 다음 사항에 주의하십시오.
리소스 집약적인 탐색 특성이 있습니다
기기 식별
보고서에서 반환한 기기를 식별하기 위한 여러 가지 옵션이 제공됩니다. bluetooth.getDevices 및 관련 이벤트가 포함됩니다.
기기가 블루투스 기기 ID 사양을 지원하면 해당 사양에서 정의한 필드가 포함된 Device 객체입니다. 예:
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));
}
}
});
기기 ID 사양으로는 일반적으로 특정 모델과 버전까지 식별하기에 충분합니다.
공급업체의 디바이스를 요청할 수 있습니다 이 속성이 없는 경우에는 대신
기기의 클래스 또는 유형으로, address
의 제조업체 접두사와 선택적으로 결합됩니다.
대부분의 블루투스 기기는 다음에 따라 해석되는 비트 필드로 기기 클래스 정보를 제공합니다.
Baseband 할당 번호 문서를 참조하세요. 이 비트 필드는 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].deviceClass.toString(16));
}
}
});
필드 파싱은 복잡할 수 있으므로 Chrome은 가장 일반적인 기기 유형에 대해 이 작업을 자동으로 처리합니다.
type
필드를 설정합니다. 이 방법을 사용할 수 없거나 요구사항에 충분하지 않은 경우 다음을 수행해야 합니다.
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);
}
}
});
RFCOMM 및 L2CAP 사용
Chrome 앱은 RFCOMM 또는 L2CAP 서비스를 지원하는 모든 기기에 연결할 수 있습니다. 여기에는 시중에 있는 대부분의 클래식 블루투스 기기입니다.
소켓에 연결
장치에 연결하려면 세 가지가 필요합니다. 연결하는 소켓 bluetoothSocket.create를 사용하여 생성된 클래스입니다. 연결하려는 장치의 주소 서비스 자체의 UUID를 제공합니다
연결하기 전에 bluetooth.getDevice 또는 기기 검색 API가 필요합니다.
기본 연결을 설정하는 데 필요한 정보(RFCOMM 또는 L2CAP 프로토콜을 사용해야 하며, 네트워크에서 SDP 검색을 사용하여 어떤 채널 또는 PSM을 획득하는지 있습니다.
예:
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);
});
나중에 데이터 (bluetoothSocket.send)를 이 객체에 보낼 수 있도록 socketId에 대한 핸들을 유지합니다. 사용할 수 있습니다.
소켓에서 수신 및 소켓으로 전송
소켓에서 데이터를 수신하고 소켓으로 전송할 때는 ArrayBuffer
객체를 사용합니다. ArrayBuffers에 대해 알아보려면
개요, JavaScript 유형 배열, 튜토리얼 ArrayBuffer를 변환하는 방법을 확인하세요.
문자열에서 양방향으로 교환할 수 있습니다.
arrayBuffer
에 있는 데이터를 전송하려면 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")
}
})
데이터를 전송하는 메서드와 달리 이벤트 (bluetoothSocket.onReceive. 소켓이 일시중지되지 않은 상태로 생성됩니다 (bluetoothSocket.setPaused 참고). 따라서 이 이벤트의 리스너는 일반적으로 bluetoothSocket.create와 bluetoothSocket.connect입니다.
chrome.bluetoothSocket.onRecieve.addListener(function(receiveInfo) {
if (receiveInfo.socketId != socketId)
return;
// receiveInfo.data is an ArrayBuffer.
});
소켓 오류 및 연결 끊김 수신
연결 끊김 등의 소켓 오류에 대한 알림을 받으려면 bluetoothSocket.onReceiveError 이벤트를 수신할 수 있습니다.
chrome.bluetoothSocket.onReceiveError.addListener(function(errorInfo) {
// Cause is in errorInfo.error.
console.log(errorInfo.errorMessage);
});
소켓에서 연결 해제
연결을 끊고 소켓의 연결을 해제하려면 bluetoothSocket.disconnect를 사용합니다.
chrome.bluetoothSocket.disconnect(socketId);
출판 서비스
Chrome 앱은 기기로의 아웃바운드 연결 외에도 다음과 같은 서비스를 게시할 수 있습니다. RFCOMM 또는 L2CAP를 지원하는 모든 기기에서 사용됩니다.
소켓에서 수신 대기
두 가지 유형의 게시된 서비스가 지원됩니다. RFCOMM은 가장 일반적으로 사용되며 대다수의 기기 및 프로필:
var uuid = '1105';
chrome.bluetoothSocket.create(function(createInfo) {
chrome.bluetoothSocket.listenUsingRfcomm(createInfo.socketId,
uuid, onListenCallback);
});
L2CAP는 다른 기기 유형이며 다른 기기 유형과 공급업체별 용도(예: 펌웨어)를 포함합니다. 있습니다.
var uuid = '0b87367c-f188-47cd-bc20-a5f4f70973c6';
chrome.bluetoothSocket.create(function(createInfo) {
chrome.bluetoothSocket.listenUsingL2cap(createInfo.socketId,
uuid, onListenCallback);
});
두 경우 모두 선택적 bluetoothSocket.ListenOptions를 전달하여 특정
채널 또는 PSM입니다. 콜백은 chrome.runtime.lastError
를 통해 오류와 성공을 나타냅니다.
없습니다. 나중에 연결을 수락할 수 있도록 socketId에 대한 핸들 유지
(bluetoothSocket.onAccept)를 받습니다.
클라이언트 연결 수락
클라이언트 연결이 수락되고 다음을 통해 애플리케이션으로 전달됩니다. 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);
});
클라이언트 연결 수락 중지
클라이언트 연결 수락을 중지하고 서비스를 게시 취소하려면 bluetoothSocket.disconnect를 사용합니다.
chrome.bluetoothSocket.disconnect(serverSocketId);
저전력 기기와 상호작용
저전력 블루투스 (Bluetooth Smart)는 전력 소비량 감소를 목표로 하는 무선 기술입니다. 있습니다 저전력 블루투스 API를 사용하면 애플리케이션이 주변 장치에 LE 연결을 할 수 있습니다. 다음 섹션에서는 검색, 연결, 블루투스 저전력 주변 장치와 상호 작용할 수 있습니다.
주변기기 검색 및 연결
기존 블루투스 기기와 마찬가지로 LE 주변기기는
근처 기기 검색하기에서 확인할 수 있습니다 . LE 기기는 데이터 패킷을 전송하여 자체적으로 검색 가능
'광고 데이터'라는 기기가 광고 모드에 있다고 표시되는 경우 광고 데이터
에는 기기에서 사용할 수 있는 서비스의 UUID가 포함될 수 있습니다. 있는 경우 이러한 UUID는
해당하는 bluetooth.Device 객체의 uuids
속성을 사용하여 액세스할 수 있습니다.
검색된 후에는 bluetoothLowEnergy.connect를 호출하여 저전력 기기에 연결할 수 있으므로 애플리케이션이 서비스와 상호작용할 수 있도록 합니다.
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...
...
});
});
연결되면 해당 bluetooth.Device 객체의 connected
속성이
값은 true
입니다. bluetoothLowEnergy.connect를 호출하면
애플리케이션입니다. 기기에 대한 실제 연결이 존재할 수 있음
bluetoothLowEnergy.connect를 호출하지 않아도 됩니다 (예: 다른 애플리케이션). 포함
이 경우 애플리케이션이 여전히 기기의 서비스와 상호작용할 수 있지만
다른 애플리케이션에서 연결을 끊지 못하도록 항상 bluetoothLowEnergy.connect를
링크입니다.
애플리케이션을 더 이상 연결할 필요가 없으면 bluetoothLowEnergy.disconnect를 호출할 수 있습니다.
chrome.bluetoothLowEnergy.disconnect(deviceAddress);
다른 기기가 있을 수 있으므로 이 작업으로 기기에 대한 실제 링크가 반드시 제거되지는 않습니다. 활성 연결을 사용하는 애플리케이션이 있을 수 있습니다. 때로는 기기가 애플리케이션에서 제어할 수 없는 이유 (예: 기기가 운영체제의 유틸리티를 통해 사용자에 의해 명시적으로 연결 해제되거나 사라지는 경우). 애플리케이션에서 bluetooth.onDeviceChanged 이벤트를 관찰하여 변경사항에 관한 알림을 받아야 합니다. 연결하고 필요한 경우 다시 연결합니다.
연결되면 Chrome을 실행하는 기기가 중앙 역할이 되고, 원격 기기는 주변 역할에 있다고 말합니다. 이 시점에서 애플리케이션이 서비스와 연결할 수 있습니다. 참고: API는 현재 저전력 주변기기 역할을 지원하지 않습니다. 앱에서 중앙 역할만 구현할 수 있습니다
서비스, 특성, 설명어
저전력 블루투스는 속성 프로토콜이라는 간단한 요청-응답 프로토콜을 기반으로 합니다. (ATT). ATT를 사용하면 중앙 기기가 주변기기의 속성과 상호작용합니다. 일반 속성 프로필 (GATT)이라는 특수 블루투스 프로필을 준수하여 이 프로필을 연결합니다. GATT 는 다음과 같은 상위 수준의 개념을 정의합니다.
- 서비스: GATT 서비스는 목표를 달성하기 위한 데이터 및 관련 행동의 모음을 나타냅니다. 장치의 특정 기능에 대해 이야기 할 수 있습니다. 예를 들어, 심박수 모니터에는 일반적으로 최소한 "심박수 서비스" 하나. GATT 서비스에 대한 정보는 bluetoothLowEnergy.Service 객체를 사용합니다.
- 특성: GATT 특성은 GATT 서비스를 구성하는 데 사용되는 기본적인 데이터 요소입니다. 값에 액세스할 수 있는 방법을 정의하는 속성과 함께 해당 값이 포함된. 예를 들어 "심박수 서비스" '심박수 측정' 기능이 인코더-디코더 아키텍처를 사용하여 사용자 심박수의 값입니다. GATT 특성에 대한 정보는 bluetoothLowEnergy.Characteristic 객체가 포함됩니다.
- 설명어: GATT 특성 설명어에는 특성에 관한 추가 정보가 포함됩니다. GATT 특성 설명어에 대한 정보는 bluetoothLowEnergy.Descriptor 객체를 반환합니다.
Bluetooth Low Energy API를 사용하면 애플리케이션이 기기의 상태에 관한 정보를 찾을 수 있습니다.
bluetoothLowEnergy.getServices를 호출하여
bluetoothLowEnergy.getCharacteristics 및 bluetoothLowEnergy.getDescriptors가 포함됩니다. 앱에서는
uuid
필드를
원하는 GATT UUID:
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;
}
}
...
});
API를 통해 액세스할 수 있는 각 서비스, 특성, 설명어에는 고유한
instanceId
필드를 사용하여 가져올 수 있는 인스턴스 식별자 이 인스턴스 ID는
GATT 객체를 식별하고 객체에 대해 특정 작업을 수행하는 데 사용됩니다.
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) {
...
});
});
서비스 이벤트
기기가 연결되면 Chrome에서 서비스를 검색합니다. 각 서비스가 검색되고 삭제되면 애플리케이션이 bluetoothLowEnergy.onServiceAdded와 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은 서비스의 모든 특성과 설명어를 비동기식으로 탐색하고 검색이 완료되면 bluetoothLowEnergy.onServiceAdded 이벤트를 수신할 수 없습니다. 만약 Chrome은 관련된 모든 서비스를 삭제하고 bluetoothLowEnergy.onServiceRemoved 이벤트를 수신할 수 있습니다.
일부 주변기기는 서비스를 수정할 수 있습니다. 예: 서비스 특성이 변경되거나 서비스가 완전히 추가 및 삭제될 수 있습니다. Chrome은 bluetoothLowEnergy.onServiceChanged, bluetoothLowEnergy.onServiceAdded, bluetoothLowEnergy.onServiceRemoved 이벤트입니다.
chrome.bluetoothLowEnergy.onServiceChanged.addListener(function(service) {
if (service.instanceId != myService.instanceId)
return;
updateMyService(service);
});
특성 값 읽기 및 쓰기
GATT 특성은 서비스의 한 측면을 인코딩합니다. 중앙 앱은 데이터를 읽고, 작업을 수행하고, 특성 값에 따라 작동하여 주변 장치의 서비스 상태를 관리합니다. 특성은 value는 바이트 시퀀스이며, 그 의미는 특정 특성을 가질 수 있습니다 예를 들어 심박수 측정 특성의 값은 신체 센서는 사용자의 심박수와 사용자가 소모한 총 칼로리를 인코딩하며, 신체 센서는 위치 특성은 심박수 센서를 몸 안에서 착용해야 하는 위치를 인코딩합니다.
Chrome은 bluetoothLowEnergy.readCharacteristicValue 메서드를 제공하여 특징:
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.
...
});
일부 특성, 특히 '컨트롤 포인트'로 작동하는 특성은 쓰기가 가능합니다. 값에 부작용이 있습니다 예를 들어 심박수 제어점 특성은 다음 작업에 사용됩니다. 심박수 센서에 총 칼로리 소모량을 재설정하도록 지시하고 쓰기만 지원합니다. 받는사람 이를 위해 Chrome은 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.
});
특성 설명어는 동일한 방식으로 작동하며 읽기 또는 쓰기가 가능합니다. Chrome 제공 기능 bluetoothLowEnergy.readDescriptorValue 및 bluetoothLowEnergy.writeDescriptorValue 메서드를 사용하여 설명자 값을 읽고 쓸 수 있습니다.
특성이 읽기 또는 쓰기를 지원하는지 확인하려면 애플리케이션은 properties
bluetoothLowEnergy.Characteristic 객체의 필드입니다. 이 필드에는
보안 요구사항에 대한 정보로서, 해당 정보는 어떤 값을
연산을 의미합니다.
값 알림 처리
어떤 특성은 알림이나 표시를 통해 그 가치를 알 수 있습니다. 예를 들어 심박수 측정 특성은 읽거나 쓸 수 없지만, 현재 값을 정기적으로 업데이트합니다. 애플리케이션은 bluetoothLowEnergy.onCharacteristicValueChanged 이벤트가 발생합니다.
chrome.bluetoothLowEnergy.onCharacteristicValueChanged.addListener(
function(chrc) {
if (chrc.instanceId != myCharId)
return;
var bytes = new Uint8Array(chrc.value);
// Do stuff with the bytes.
...
});
특성이 알림/표시를 지원하더라도 기본적으로 사용 설정되지는 않습니다. 애플리케이션은 bluetoothLowEnergy.startCharacteristicNotifications를 호출하고 bluetoothLowEnergy.stopCharacteristicNotifications 메서드는 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);
}
알림이 시작되면 애플리케이션은 bluetoothLowEnergy.onCharacteristicValueChanged가 발생합니다. 특성에서 학습합니다. 특성이 읽기를 지원하는 경우 이 이벤트도 bluetoothLowEnergy.readCharacteristicValue가 정상적으로 호출된 후 전송됩니다. 이렇게 하면 앱이 읽기 요청 및 알림을 통해 트리거된 값 업데이트의 제어 흐름을 통합할 수 있습니다.
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.
});
});
특성이 알림을 지원하는 경우 properties
필드에 다음 중 하나가 포함됩니다.
"notify"
또는 "indicate"
속성
참고: 특성이 알림/표시를 지원하는 경우 '클라이언트'라는 Characteristic Configuration(특성 구성)' 설명어를 사용하여 알림을 활성화/비활성화합니다. Chrome에서 허용하지 않음 이 설명어에 쓸 수 있습니다. 앱에서는 대신 bluetoothLowEnergy.startCharacteristicNotifications 및 bluetoothLowEnergy.stopCharacteristicNotifications 메서드를 사용하여 알림 동작을 제어할 수 있습니다.