[英]BLE advert — get the device display name
聽取BLE廣告並從廣告中獲取BluetoothAddress,信號強度等非常簡單。 這個頁面說
獲得地址后,可以調用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填充其未配對主機列表的方式。
如果您使用廣告觀察程序,則可以檢查BluetoothLEAdvertisement.LocalName
屬性。
對於您的第二個問題,也許您的手機是通過藍牙經典發現的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.