对于UWP (Windows-10)中的Bluetooth-LE设备,我如何获得完整设备名称的列表?



我觉得我错过了一些东西。

我在我的应用程序中使用蓝牙- le设备取得了巨大的成功,直到我尝试使用名称超过8个字符的设备。我使用BluetoothLEAdvertisementWatcher,然后得到广告——我只看那些填了名字的广告,然后只看那些我感兴趣的服务。更深入地查看返回的数据,我现在看到这些广告是具有BluetoothLEAdvertisementDataTypes ShortenedLocalName的数据部分的广告,这被蓝牙规范限制为8个字符。

但是,现在我需要支持具有12个字符名称的设备,并且我并不总是获得CompleteLocalName类型。有一次我甚至没有得到ShortenedLocalName。这是三种完全不同的设备,甚至在我最喜欢的iOS BLE工具(LightBlue &EFR Connect),我得到了不同的结果:LightBlue似乎总是显示长名称,但EFR Connect显示2/3(并且,EFR Connect显示"完整";本地名称(只有8个字符)。在Windows上"添加一个设备",相同的两个显示12个字符的名称,而另一个只显示8个字符。(我开始认为这个设备可能配置错误。)

更新:就在发送这个之后,我尝试了一些事情——做一个"PAIR"这些设备在Windows设备枚举中没有显示所有字符——在PAIR之后,它们显示所有12个字符,甚至在UNPAIR之后。

我已经开始查看Windows.Devices.Enumeration.DeviceInformation.CreateWatcher()调用——我得到了"更好"。info from this(2/3的全称).

发现有12个字符名称的蓝牙低功耗设备的最佳实践是什么?看起来单靠蓝牙leadvertisementwatcher并不完美。似乎我应该从Windows获取关于设备的信息,所以枚举设备是有意义的。还有其他我应该考虑的主意吗?

BluetoothLEAdvertisementWatcher对象的Received事件中,有一个BluetoothLEAdvertisementReceivedEventArgs参数包含完整的本地名称:

private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
string localName = eventArgs.Advertisement.LocalName;
}

请记住,监视器以相同的方式处理广告和扫描响应,因此如果是eventArgs.AdvertisementType == BluetoothLEAdvertisementType.ScanResponse,则可能不存在本地名称。这取决于你的外围设备。