我需要开发一个应用程序,通过蓝牙低能量与设备进行通信。 一旦应用程序通过蓝牙连接到设备,它将通过使用gatt服务来接收和发送数据。
该应用程序需要在Windows 10环境中运行。 到目前为止,我能够通过使用以下UWP类来开发和尝试应用程序:
DeviceWatcher
BluetoothLEDevice
一旦设备被发现并配对,通信就开始了。 我的主要问题是我无法控制与设备的连接/断开,即一旦设备已经正确和先前配对,连接就会自动启动,但是我还没有发现任何connect()/ disconnect( )方法到目前为止。
有没有办法控制与特定的蓝牙LE设备的连接? 有没有其他的API,允许使用蓝牙而不使用UWP框架,并提供更多的蓝牙控制?
一旦设备配对,只要打开靠近Windows 10的机器,它将尝试连接。 这是蓝牙定义的行为,因为外设在打开时总是发出连接请求。
有一个DeviceWatcher后台任务,您可以注册以在您的蓝牙设备连接时触发您的应用程序。 你可以在这里找到一些示例代码 。
有没有办法控制与特定的蓝牙LE设备的连接?
是。 要启动连接:当您通过FromBluetoothAddressAsync
或FromIdAsync
创建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上打破其他蓝牙行为。