如何在Windows 10上控制蓝牙LE连接?

时间:2016-09-13 12:24:18

标签: c# windows bluetooth

我需要开发一个通过蓝牙低功耗与设备通信的应用程序。一旦应用程序通过蓝牙连接到设备,它就会使用gatt服务接收和发送数据。

应用程序需要在Windows 10环境中运行。到目前为止,我能够使用以下UWP类开发和尝试应用程序:

DeviceWatcher

BluetoothLEDevice

一旦设备被发现并配对,通信就开始了。我遇到的主要问题是我无法控制与设备的连接/断开连接,即一旦设备正确且先前已配对,连接就会自动启动,但我没有找到任何连接()/断开连接( )方法到目前为止。

有没有办法控制与特定蓝牙LE设备的连接?是否有其他API允许在不使用UWP框架的情况下使用蓝牙,并提供对蓝牙的更多控制?

1 个答案:

答案 0 :(得分:2)

设备配对后,无论何时打开Windows 10计算机,它都会尝试连接。这是蓝牙中定义的行为,因为外设在打开时始终会发出连接请求。

您可以注册一个DeviceWatcher后台任务,以便在蓝牙设备连接时触发您的应用。您可以找到some sample code here

有没有办法控制与特定蓝牙LE设备的连接?

是。要发起连接:当您通过BluetoothLEDeviceFromBluetoothAddressAsync创建FromIdAsync时,系统会尝试启动与该外围设备的连接,如果它尚未建立连接。

// Connects to a Bluetooth device, given some string deviceId
BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(deviceId);

要处置连接,请在close上调用BluetoothLEDevice方法。如果您的应用程序是唯一具有外围设备句柄的实体,则会导致系统断开连接。但是,如果其他应用程序或系统服务具有外围设备的句柄,则不会关闭连接。

// Will disconnect from the BTLE device, if you hold the only handle
bleDevice.close()

这些取自BluetoothLEDevice documentation here.

还有其他API吗?

Windows 10中没有内置任何其他API可以提供对蓝牙的更多控制。 UWP API提供Windows 10当前提供的最多控制。您可以使用备用蓝牙堆栈,但这些必须单独安装,并可能破坏Windows 10上的其他蓝牙行为。