이 문서에는 일반적으로 묻는 UWP Bluetooth API 질문에 대한 답변이 포함되어 있습니다.
어떤 API를 사용합니까? Bluetooth 클래식(RFCOMM) 또는 Bluetooth 저에너지(GATT)?
이 일반적인 주제에 대해 온라인에서 다양한 토론이 있으므로 Windows와 관련하여 이 답변을 정확하게 유지해 보겠습니다. 다음은 몇 가지 일반적인 지침입니다.
Bluetooth LE(Windows.Devices.Bluetooth.GenericAttributeProfile)
Bluetooth 저에너지를 지원하는 디바이스와 통신할 때 GATT API를 사용합니다. 사용 사례가 드물거나 대역폭이 낮거나 저전력이 필요한 경우 Bluetooth 저에너지가 해답입니다. 이 기능을 포함하는 기본 네임스페이스는 Windows.Devices.Bluetooth.GenericAttributeProfile입니다.
Bluetooth LE를 사용하지 않는 경우
- 대역폭이 높고 빈도가 높은 시나리오입니다. 지속적으로 많은 양의 데이터와 동기화를 유지해야 하는 경우 Bluetooth 클래식 또는 WiFi를 사용하는 것이 좋습니다.
Bluetooth 클래식(Windows.Devices.Bluetooth.Rfcomm)
RFCOMM API는 개발자에게 양방향 직렬 포트 스타일 통신을 수행할 수 있는 소켓을 제공합니다. 소켓이 있으면 작성 및 읽기 방법은 상당히 표준입니다. 이 구현은 Rfcomm 채팅 샘플에 표시됩니다.
Bluetooth Rfcomm을 사용하지 않는 경우
- 알림. Bluetooth GATT 프로토콜에는 이에 대한 특정 명령이 있으며, 이로 인해 전력 그리기가 훨씬 줄어들고 응답 시간이 빨라집니다.
- 근접 또는 현재 상태 검색을 확인합니다. 광고 API를 사용하고 Bluetooth LE를 통해 연결하는 것이 좋습니다.
연결이 끊긴 후 Bluetooth LE 디바이스의 응답이 중지되는 이유는 무엇인가요?
가장 일반적인 이유는 원격 디바이스에서 페어링 정보가 손실되었기 때문입니다. 많은 수의 이전 Bluetooth 디바이스에는 인증이 필요하지 않습니다. 사용자를 보호하기 위해 Windows 설정에서 수행되는 모든 페어링 트랜잭션에는 인증이 필요하며 일부 디바이스는 이를 염두에 두고 설계되지 않았습니다.
Windows 10 릴리스 1511부터 개발자는 페어링 핸드셰이크를 제어할 수 있습니다. 디바이스 열거형 및 페어링 샘플은 새 디바이스 연결의 다양한 측면을 자세히 설명합니다.
이 예제에서는 암호화를 사용하지 않고 디바이스와 페어링을 시작합니다. 원격 디바이스가 작동하기 위해 암호화 또는 인증이 필요하지 않은 경우에만 작동합니다.
// Get ceremony type and protection level selections
// You must select at least ConfirmOnly or the pairing attempt will fail
DevicePairingKinds ceremonySelected = DevicePairingKinds.ConfirmOnly;
// Workaround remote devices losing pairing information
DevicePairingProtectionLevel protectionLevel = DevicePairingProtectionLevel.None
DeviceInformationCustomPairing customPairing = deviceInfoDisp.DeviceInformation.Pairing.Custom;
// Declare an event handler - you don't need to do much in PairingRequestedHandler since the ceremony is "None"
customPairing.PairingRequested += PairingRequestedHandler;
DevicePairingResult result = await customPairing.PairAsync(ceremonySelected, protectionLevel);
Bluetooth 디바이스를 사용하기 전에 페어링해야 하나요?
Bluetooth RFCOMM(클래식)을 활용하는 경우 디바이스를 사용하기 전에 페어링할 필요가 없습니다. Windows 10 릴리스 1607부터 가까운 디바이스를 쿼리하고 연결할 수 있습니다. 업데이트된 RFCOMM 채팅 샘플 은 이 기능을 보여 줍니다.
(14393 이하) 이 기능은 Bluetooth 저에너지(GATT 클라이언트)에서 사용할 수 없으므로 이러한 디바이스에 액세스하려면 설정 페이지를 통해 또는 Windows.Devices.Enumeration API를 사용하여 페어링해야 합니다.
(15030 이상) Bluetooth 디바이스 페어링은 더 이상 필요하지 않습니다. 원격 디바이스의 현재 상태를 쿼리하려면 GetGattServicesAsync 및 GetCharacteristicsAsync와 같은 새로운 비동기 API를 사용합니다. 자세한 내용은 클라이언트 문서를 참조하세요 .
디바이스와 통신하기 전에 언제 디바이스와 페어링해야 하나요?
일반적으로 디바이스와 신뢰할 수 있는 장기적 결합이 필요한 경우 사용자를 설정 페이지로 보내거나 디바이스 열거형 및 페어링 API를 사용하여 디바이스와 페어링합니다. 공개적으로 노출되는 디바이스(온도 센서 또는 비콘)에서 정보를 읽어야 하는 경우 디바이스와 페어링하지 않고도 광고를 연결하거나 수신 대기합니다. 이렇게 하면 많은 디바이스가 페어링을 지원하지 않으므로 장기적으로 상호 운용성 문제를 방지할 수 있습니다.
모든 Windows 디바이스에서 주변 장치 역할을 지원합니까?
아니요. 하드웨어 종속 기능이지만 지원되는지 여부를 쿼리하기 위해 BluetoothAdapter.IsPeripheralRoleSupported 메서드가 제공됩니다. 현재 지원되는 디바이스에는 8992+ 및 RPi3(Windows IoT)의 Windows Phone이 포함됩니다.
Win32에서 이러한 API에 액세스할 수 있나요?
예, 이러한 모든 API가 작동해야 합니다. 이 블로그에서는 데스크톱 애플리케이션에서 Windows API를 호출하는 방법을 자세히 설명합니다.