Bluetooth 개발자 FAQ

이 문서에는 UWP Bluetooth API와 관련된 FAQ가 포함되어 있습니다.

어떤 API를 사용하나요? Bluetooth Classic(RFCOMM) 또는 Bluetooth 저에너지(GATT)가 있나요?

이 일반적인 항목에 대한 여러 온라인 논의가 있으므로 이에 대한 답변은 Windows와 관련한 차이점에 대해 정확하게 유지하도록 합니다. 다음은 몇 가지 일반적인 지침입니다.

Bluetooth LE(Windows.Devices.Bluetooth.GenericAttributeProfile)

Bluetooth LE(저에너지)를 지원하는 디바이스와 통신하는 경우 GATT API를 사용합니다. 사용 사례가 드물거나, 대역폭이 낮거나, 저전력이 필요한 경우 Bluetooth Low Energy(절전)가 해답입니다. 이 기능을 포함하는 주요 네임스페이스는 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 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와 같은 새로운 Async API를 사용하여 원격 디바이스의 현재 상태를 쿼리할 수 있습니다. 자세한 내용은 클라이언트 문서를 참조하세요.

통신하기 전에 언제 디바이스와 페어링해야 하나요?

일반적으로 디바이스에 대한 장기적인 신뢰가 필요한 경우 사용자를 설정 페이지로 안내하거나 디바이스 열거 및 페어링 API 사용하여 디바이스와 페어링합니다. 공개적으로 노출된 디바이스(온도 센서 또는 비콘)에서 정보를 읽기만 하려면, 디바이스와 페어링하지 않고 광고에 연결하거나 이를 들어봅니다. 이렇게 하면 디바이스가 페어링을 지원하지 않으므로 장기적으로 상호 운용성 문제를 방지할 수 있습니다.

모든 Windows 디바이스가 주변 장치 역할을 지원하나요?

아니요. 이 기능은 하드웨어 종속 기능이지만 지원 여부를 쿼리할 수 있는 BluetoothAdapter.IsPeripheralRoleSupported 메서드가 제공됩니다. 현재 지원되는 디바이스에는 Windows Phone 8992+ 및 RPi3(Windows IoT)가 있습니다.

Win32에서 이러한 API에 액세스할 수 있나요?

예, 이러한 모든 API가 작동합니다. 이 블로그는 데스크톱 애플리케이션의 Windows API를 호출하는 방법에 대해 자세히 설명합니다.

이 기능이 특정 SKU에 존재해야 하나요?

Bluetooth LE: 예, 모든 기능이 OneCore에 있으며 Bluetooth LE 스택을 지원하는 대부분의 최신 디바이스에서 사용할 수 있습니다.

주의: 주변 장치 역할은 하드웨어에 종속적이며 일부 Windows Server 버전은 Bluetooth를 지원하지 않습니다.

Bluetooth BR/EDR(클래식): 일부 차이는 있지만 전반적으로 프로필 수준 지원이 매우 유사합니다. RFCOMM의 문서와 PC전화에 대해 지원되는 이러한 프로필 문서를 참조하세요.