编者:李国帅

时间:2020/01/03

背景原因:

生活中,我们会接触到很多的蓝牙应用,比如蓝牙音响,鼠标,共享单车,便携式医疗检测设备等。通常使用android设备或者ios开发蓝牙还是比较方便的,毕竟蓝牙本身就是为了移动应用而产生的。

         那么就会想,在windows上能不能去连接那些蓝牙设备呢?现在在windows上连接蓝牙还是有不少方法的,我就尝试了一下。

所需资源:

Android,windows,蓝牙USB

问题相关:

在android上使用开源库https://github.com/vir56k/bluetoothDemo中的服务器部分创建一个Gatt服务。

         在pc上调用Microsoft Bluetooth api去连接Gatt服务,然后写入特征值,在android展示出来。

         其中就遇到了一个问题,就是题目上说的,PC端使用Microsoft Bluetooth api连接android BLE Gatt server需要先进行匹配。

         首先,因为使用BluetoothFindFirstDevice根本就找不到Gatt server,谈不上调用接口匹配。

         而且,调用SetupDiGetClassDevs方法也获取不到Gatt server的句柄,因为Gatt server找不到。

         于是一通乱找,找到了2016年的解答,觉得即便是到现在,windows的这个问题依然是没有解决的,使用起来也没有android方便。

PC端使用Microsoft Bluetooth api连接android BLE Gatt server需要先进行匹配_microsoft

 

问题解决:

实际上,只有在PC上匹配了Gatt Server,就调用SetupDiGetClassDevs方法获取设备句柄,进而调用Microsoft Bluetooth api一路找到特征值进行设置。

 

PC端使用Microsoft Bluetooth api连接android BLE Gatt server需要先进行匹配_pc_02

PC端使用Microsoft Bluetooth api连接android BLE Gatt server需要先进行匹配_Gatt_03

 

 

配置好了之后就可以调用BluetoothGATTSetCharacteristicValue与android端GattServer进行通信了,通过设置和获取特征值,实现相互之间的通信。

PC端使用Microsoft Bluetooth api连接android BLE Gatt server需要先进行匹配_Gatt_04