我觉得我好像漏掉了什么。
我在应用程序中使用蓝牙设备取得了巨大的成功,直到我尝试使用名字超过8个字符的设备。我使用BluetoothLEAdvertisementWatcher,得到广告--我只看那些填好名字的广告,然后只看那些有我感兴趣的服务的广告。更深入地观察返回的数据,我现在看到这些广告是带有BluetoothLEAdvertisementDataTypes ShortenedLocalName数据部分的广告,该部分仅限于8个字符。
但是,现在我需要支持有12个字符名的设备,而且我并不总是得到CompleteLocalName类型。在其中一个问题上,我甚至得不到ShortenedLocalName。这些设备是3种完全不同的设备,即使在我最喜欢的iOS BLE工具(LightBlue & EFR )上,我也得到了不同的结果: LightBlue似乎总是显示长名称,但是EFR显示在3种中的2种(而且,EFR显示的“完整”本地名称仅为8个字符)。在Windows“添加设备”中,相同的2显示12个字符的名称,而另一个只显示8个字符。(我开始认为,这一台设备可能配置不当。)
更新:就在发送完这个之后,我尝试了一些东西--对这些设备中没有显示Windows设备枚举中所有字符的“对”--在这对之后,它们显示了所有的12个字符,甚至在取消对之后。
我已经开始查看Windows.Devices.Enumeration.DeviceInformation.CreateWatcher()调用--我从中获得了“更好”的信息(3中2的完整名称)。
发现有12个字符名的蓝牙低能设备的最佳实践是什么?单靠BluetoothLEAdvertisementWatcher似乎并不完美。似乎我应该从Windows获得有关设备的信息,所以枚举设备是有意义的。还有其他的想法我应该考虑吗?
发布于 2022-06-13 13:50:13
在Received
对象的BluetoothLEAdvertisementWatcher
事件中,有一个包含完整本地名称的BluetoothLEAdvertisementReceivedEventArgs
参数:
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
string localName = eventArgs.Advertisement.LocalName;
}
请记住,观察者以相同的方式处理广告和扫描响应,因此如果是eventArgs.AdvertisementType == BluetoothLEAdvertisementType.ScanResponse
,则可能不存在本地名称。这取决于你的周边。
https://stackoverflow.com/questions/72607104
复制相似问题