收听BLE广告并从广告中获取BluetoothAddress,信号强度等非常简单。 This page说
一旦有了地址,就可以调用BluetoothLEDevice.FromBluetoothAddressAsync以获得对该设备的引用。
所以我这样做了,这给了我一个带Name属性的BluetoothLEDevice对象。不幸的是,该名称经常-但并非总是-空字符串。
当我交互式扫描蓝牙设备时,Windows为我显示了可以看到的设备的名称列表(不包括已配对的设备)。它可以非常快速地执行此操作,并且可以显示许多广告中从未出现过的设备。
是否存在可靠的策略来快速获取计算机和电话列出未配对的设备时通常显示的名称?
我尝试了Emil的建议,尽管通过消除获取BluetoothLEDevice对象的需要简化了我的代码,但基本问题仍然存在:不能依靠广告来提供名称。它们甚至不包含有意义的制造商数据。
当前代码如下:
BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
...
watcher.Received += OnAdvertisementReceived;
watcher.Start();
...
private void BleAdvertHandlerAsync(BluetoothLEAdvertisementReceivedEventArgs args)
{
var localName = args.Advertisement.LocalName;
...
}
将本地名称替换为变量可以避免以下事实:解析值需要进行COM调用,而断点表达式中不允许该调用。
使用鼠标和键盘上的开关可以与三个不同的主机配对并在它们之间切换时,我注意到当我告诉它们连接到另一个主机时,我会立即收到包含名称的广告。如果主机不存在,则当我切换回计算机并建立会话时,主机将源源不断地消失。
这表明广告不是Windows填充未配对主机列表的方式。
答案 0 :(得分:0)
如果您使用广告观察器,则可以检查BluetoothLEAdvertisement.LocalName
属性。
对于第二个问题,也许您的手机是通过Bluetooth Classic找到的?