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

我需要开发一个应用程序,通过蓝牙低能量与设备进行通信。 一旦应用程序通过蓝牙连接到设备,它将通过使用gatt服务来接收和发送数据。

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

DeviceWatcher

BluetoothLEDevice

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

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

一旦设备配对,只要打开靠近Windows 10的机器,它将尝试连接。 这是蓝牙定义的行为,因为外设在打开时总是发出连接请求。

有一个DeviceWatcher后台任务,您可以注册以在您的蓝牙设备连接时触发您的应用程序。 你可以在这里找到一些示例代码 。

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

是。 要启动连接:当您通过FromBluetoothAddressAsyncFromIdAsync创建BluetoothLEDevice时,系统将尝试启动到该外设的连接(如果它尚未连接)。

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

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

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

这些取自这里的BluetoothLEDevice文档。

还有其他API吗?

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