2016-09-20 298 views
2

如何迫使Windows与UWP应用程序中使用的BLE设备断开连接?我收到来自某些特征的通知,但在某些时候我想停止接收它们,并确保从BLE设备断开以保存BLE设备的电池?Windows BLE UWP断开连接

回答

0

只需处理与设备相关的所有对象。这将断开设备,除非有其他应用程序连接到它。

0

假设您的应用程序运行作为GATT客户端和你有以下情况,您将可以在你的代码工作:

GattCharacteristic myGattchar; // The gatt characteristic you are reading or writing on your BLE peripheral 
GattDeviceService myGattServ; // The BLE peripheral' gatt service on which you are connecting from your application 
BluetoothLEDevice myBleDev; // The BLE peripheral device your are connecting to from your application 

当你已经连接到您的BLE外设,如果调用Dispose()这样的方法:

myBleDev.Dispose();和/或myGattServ.Dispose();和/或myGattchar.Service.Dispose()

您肯定会在您的应用程序中释放资源,但不会干净地关闭BLE连接:应用程序无法访问控制连接的资源。尽管如此,连接仍然建立在堆栈的较低层(在我的外设上,蓝牙连接激活 LED在调用任何Dispose()方法后保持ON)。

强制断开由第一禁用对有关特性(即在上述我的例子myGattchar)通知和指示通过呼叫与参数写入0(零)到Client Characteristic Configuration descriptor该特性方法WriteClientCharacteristicConfigurationDescriptorAsyncGattClientCharacteristicConfigurationDescriptorValue.None

GattCommunicationStatus status = 
await myGattchar.WriteClientCharacteristicConfigurationDescriptorAsync(
GattClientCharacteristicConfigurationDescriptorValue.None); 
+0

这是Microsoft的UWP BLE示例显示您应该执行的操作。它不适合我。 –

0

对于我UWP的应用程序,即使我用的Dispose()方法,我还是收到通知。什么帮助我将我的设备和特征设置为空。例如:

device.Dispose();

device = null;

并不是所有的人都知道这个编程是如何“正确”的,但它到目前为止一直工作的很好。